Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

एकल SQL क्वेरी के माध्यम से समान डेटाबेस तालिका में सामान्य रिकॉर्ड कैसे प्राप्त करें?

आप जो चाहते हैं उसे बाहर निकालने का यह एक कच्चा-एसक्यूएल तरीका है, मुझे लगता है:

select * from articles_users where article_id in (select articles.id from articles inner join articles_users on articles_users.article_id = articles.id where user_id = 1) and user_id = 2;

आप रेल में उपयोगकर्ता आईडी कहां बदल सकते हैं:

ArticlesUser.find_by_sql(["select * from articles_users where article_id in (select articles.id from articles inner join articles_users on articles_users.article_id = articles.id where user_id = ?) and user_id = ?", @user1.id, @user2.id])

या अनेक आईडी के लिए::

ArticlesUser.find_by_sql(["select * from articles_users where article_id in (select articles.id from articles inner join articles_users on articles_users.article_id = articles.id where user_id = ?) and user_id IN (?)", @user1.id, [@user2.id,@user3.id]])

तो नमूना डेटा से (आपके अन्य प्रश्नों से):

mysql> select * from articles_users;
+----+---------+------------+
| id | user_id | article_id |
+----+---------+------------+
|  1 |       1 |          1 |
|  2 |       1 |          2 |
|  3 |       1 |          3 |
|  4 |       2 |          1 |
|  5 |       2 |          2 |
|  6 |       3 |          1 |
|  7 |       3 |          3 |
|  8 |       4 |          4 |
+----+---------+------------+
8 rows in set (0.00 sec)

यह इस प्रकार मान लौटाएगा:

mysql> select * from articles_users where article_id in (select articles.id from articles inner join articles_users on articles_users.article_id = articles.id where user_id = 1) and user_id = 2;
+----+---------+------------+
| id | user_id | article_id |
+----+---------+------------+
|  4 |       2 |          1 |
|  5 |       2 |          2 |
+----+---------+------------+
2 rows in set (0.00 sec)

mysql> select * from articles_users where article_id in (select articles.id from articles inner join articles_users on articles_users.article_id = articles.id where user_id = 1) and user_id = 3;
+----+---------+------------+
| id | user_id | article_id |
+----+---------+------------+
|  6 |       3 |          1 |
|  7 |       3 |          3 |
+----+---------+------------+
2 rows in set (0.00 sec)

या एकाधिक उपयोगकर्ता-आईडी के लिए:

mysql> select * from articles_users where article_id in (select articles.id from articles inner join articles_users on articles_users.article_id = articles.id where user_id = 1) and user_id in (2,3);
+----+---------+------------+
| id | user_id | article_id |
+----+---------+------------+
|  4 |       2 |          1 |
|  5 |       2 |          2 |
|  6 |       3 |          1 |
|  7 |       3 |          3 |
+----+---------+------------+
4 rows in set (0.00 sec)

आपने एक एसक्यूएल रास्ता मांगा है - लेकिन ऐसा करने के लिए लगभग निश्चित रूप से एक रेली तरीका है ... लेकिन यह आपको शुरू करना चाहिए, और आप इसे यहां से नीचे कर सकते हैं।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mysql क्वेरी में सीरियल नंबर जेनरेट करें

  2. SQL में निरंतर पंक्तियों के लिए GROUP BY

  3. mySQL लोड डेटा स्थानीय फ़ाइल गलत संख्या प्रारूप

  4. JDBC के साथ एक लेनदेन में 2 अद्यतन प्रश्नों को कैसे निष्पादित करें?

  5. MySQL में पदानुक्रमित डेटा से गहराई आधारित पेड़ उत्पन्न करना (कोई सीटीई नहीं)