सेल्फ-JOIN से एकाधिक शर्तें पूरी करने वाले रिकॉर्ड
एक ही टेबल में एकाधिक शर्तें (AND) पूरी करने वाले रिकॉर्ड खोजने के लिए सेल्फ-JOIN का उपयोग करें।
उदाहरण: टेबल और डेटा
mysql> CREATE TABLE selectPerson (
-> PersonId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> PersonName VARCHAR(20),
-> PersonFavouriteFruit VARCHAR(60)
-> );
mysql> INSERT INTO selectPerson(PersonName, PersonFavouriteFruit) VALUES
('John', 'Banana'), ('John', 'Blackberry'), ('John', 'Blueberry'),
('Carol', 'Apple'), ('Carol', 'Avocado'), ('Carol', 'Banana'),
('Sam', 'Ackee'), ('Sam', 'Apple'), ('Sam', 'Apricots'), ('Sam', 'Banana');
डेटा
+----------+------------+----------------------+ | PersonId | PersonName | PersonFavouriteFruit | +----------+------------+----------------------+ | 1 | John | Banana | | 2 | John | Blackberry | | 3 | John | Blueberry | | 4 | Carol | Apple | | 5 | Carol | Avocado | | 6 | Carol | Banana | | 7 | Sam | Ackee | | 8 | Sam | Apple | | 9 | Sam | Apricots | | 10 | Sam | Banana | +----------+------------+----------------------+
क्वेरी: जो Apple AND Banana दोनों पसंद करते हैं
mysql> SELECT tbl1.PersonName
-> FROM selectPerson tbl1
-> JOIN selectPerson tbl2 ON tbl1.PersonName = tbl2.PersonName
-> WHERE tbl1.PersonFavouriteFruit = 'Banana'
-> AND tbl2.PersonFavouriteFruit = 'Apple';
परिणाम
+------------+ | PersonName | +------------+ | Carol | | Sam | +------------+
व्याख्या
tbl1- 'Banana' पसंद करने वाली पंक्तियाँtbl2- 'Apple' पसंद करने वाली पंक्तियाँJOIN ... ON tbl1.PersonName = tbl2.PersonName- समान नाम वाले व्यक्तिWHERE- दोनों शर्तें पूरी
वैकल्पिक: GROUP BY + HAVING
SELECT PersonName
FROM selectPerson
WHERE PersonFavouriteFruit IN ('Apple', 'Banana')
GROUP BY PersonName
HAVING COUNT(DISTINCT PersonFavouriteFruit) = 2;
तुलना
| विधि | पठनीयता | प्रदर्शन | लचीलापन |
|---|---|---|---|
| सेल्फ-JOIN | मध्यम | अच्छा (इंडेक्स के साथ) | जटिल शर्तों के लिए |
| GROUP BY HAVING | सरल | अच्छा | सेट-आधारित शर्तों के लिए |
| INTERSECT | सरल | MySQL 8.0+ | सेट ऑपरेशन |