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

सभी निर्दिष्ट टैग के साथ टैग की गई चीज़ों को खोजने के लिए sql क्वेरी में सहायता चाहिए

IN का उपयोग करना:

SELECT p.*
  FROM POSTS p
 WHERE p.id IN (SELECT tg.post_id
                  FROM TAGGINGS tg
                  JOIN TAGS t ON t.id = tg.tag_id
                 WHERE t.name IN ('Cheese','Wine','Paris','Frace','City','Scenic','Art')
              GROUP BY tg.post_id
                HAVING COUNT(DISTINCT t.name) = 7)

जॉइन का उपयोग करना

SELECT p.*
  FROM POSTS p
  JOIN (SELECT tg.post_id
          FROM TAGGINGS tg
          JOIN TAGS t ON t.id = tg.tag_id
         WHERE t.name IN ('Cheese','Wine','Paris','Frace','City','Scenic','Art')
      GROUP BY tg.post_id
        HAVING COUNT(DISTINCT t.name) = 7) x ON x.post_id = p.id

EXISTS का उपयोग करना

SELECT p.*
  FROM POSTS p
 WHERE EXISTS (SELECT NULL
                 FROM TAGGINGS tg
                 JOIN TAGS t ON t.id = tg.tag_id
                WHERE t.name IN ('Cheese','Wine','Paris','Frace','City','Scenic','Art')
                  AND tg.post_id = p.id
             GROUP BY tg.post_id
               HAVING COUNT(DISTINCT t.name) = 7)

स्पष्टीकरण

चीजों की जड़ यह है कि COUNT(DISTINCT t.name) यह सुनिश्चित करने के लिए टैग नामों की संख्या से मेल खाना चाहिए कि वे सभी टैग पोस्ट से संबंधित हैं। DISTINCT के बिना, एक जोखिम है कि नामों में से किसी एक के डुप्लीकेट 7 की गिनती लौटा सकते हैं--इसलिए आपके पास एक गलत सकारात्मक होगा।

प्रदर्शन

अधिकांश आपको बताएंगे कि जॉइन इष्टतम है, लेकिन जॉइन परिणामसेट में पंक्तियों को डुप्लिकेट करने का भी जोखिम उठाते हैं। EXISTS मेरी अगली पसंद होगी--कोई डुप्लिकेट जोखिम नहीं, और आम तौर पर तेज़ निष्पादन लेकिन व्याख्या योजना की जांच अंततः आपको बताएगी कि आपके सेटअप और डेटा के आधार पर सबसे अच्छा क्या है।



  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:फुलटेक्स्ट में स्कोर हमेशा 1 क्यों होता है?

  2. Oracle SQL डेवलपर का उपयोग करके आप MySQL डेटाबेस से कैसे जुड़ते हैं?

  3. माइग्रेशन में रॉ SQL चलाएँ

  4. MySQL दो क्षेत्रों में तालिकाओं में कैसे शामिल हों

  5. एकाधिक डेटाबेस और लेनदेन