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

MySQL में अनेक-से-अनेक संबंध में चयन करें

इसे करने के दो तरीके हैं। मैं पहला तरीका पसंद करता हूं, जो प्रत्येक टैग के लिए स्वयं-जुड़ना है:

SELECT l.*
FROM Locations l
JOIN LocationsTagsAssoc a1 ON a1.LocationID = l.ID
JOIN Tags t1 ON a1.TagID = t1.ID AND t1.Name = ?
JOIN LocationsTagsAssoc a2 ON a2.LocationID = l.ID
JOIN Tags t2 ON a2.TagID = t2.ID AND t2.Name = ?
JOIN LocationsTagsAssoc a3 ON a3.LocationID = l.ID
JOIN Tags t3 ON a3.TagID = t3.ID AND t3.Name = ?;

दूसरा तरीका भी काम करता है, लेकिन GROUP BY using का उपयोग करके MySQL में एक अस्थायी तालिका लगती है और प्रदर्शन धीमा होता है:

SELECT l.*
FROM Locations l
JOIN LocationsTagsAssoc a ON a.LocationID = l.ID
JOIN Tags t ON a.TagID = t.ID
WHERE t.Name IN (?, ?, ?)
GROUP BY l.ID
HAVING COUNT(*) = 3;

@Erikoenig से दोबारा टिप्पणी करें:

यदि आप यह सुनिश्चित करना चाहते हैं कि कोई अतिरिक्त टैग नहीं हैं, तो आप इसे इस तरह से कर सकते हैं:

SELECT l.*
FROM Locations l
JOIN LocationsTagsAssoc a ON a.LocationID = l.ID
JOIN Tags t ON a.TagID = t.ID
GROUP BY l.ID
HAVING COUNT(*) = 3 AND SUM(t.Name IN (?, ?, ?)) = 3;

WHERE क्लॉज को निकालने से अन्य टैग्स को गिनने की अनुमति मिलती है, यदि कोई हो। तो COUNT() 3 से अधिक हो सकता है।

या अगर गिनती ठीक तीन टैग है, लेकिन इन तीनों में से कुछ सही टैग नहीं हैं, तो HAVING क्लॉज में SUM () शर्त यह सुनिश्चित करती है कि आपके इच्छित सभी तीन टैग समूह में मौजूद हैं।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PHP पीडीओ MYSQL में एकाधिक पंक्तियों को सम्मिलित करने का सबसे अच्छा तरीका क्या है?

  2. MySQL में मल्टीपल मूविंग एवरेज की गणना कैसे करें

  3. MySQL अप्रत्यक्ष ग्राफ़ किनारों को कुशलता से संग्रहीत करता है

  4. देखें कि क्या mysql . का उपयोग करके बहुभुज के भीतर अक्षांश/लंबा गिर जाता है

  5. MySQL चयन क्वेरी में उपयोग करने के लिए अनुक्रमणिका को कैसे इंगित करें?