NOT IN सबक्वेरी से अंतर प्राप्त करें
एक टेबल में मौजूद लेकिन दूसरी टेबल में नहीं मौजूद रिकॉर्ड पाने के लिए NOT IN के साथ सबक्वेरी का उपयोग करें।
सिंटैक्स
SELECT * FROM tableA WHERE columnA NOT IN (SELECT columnB FROM tableB);
उदाहरण: टेबल A और B
टेबल A
mysql> CREATE TABLE A (Value INT); mysql> INSERT INTO A VALUES (10), (20), (30), (50), (80);
+-------+ | Value | +-------+ | 10 | | 20 | | 30 | | 50 | | 80 | +-------+
टेबल B
mysql> CREATE TABLE B (Value2 INT); mysql> INSERT INTO B VALUES (20), (50);
+--------+ | Value2 | +--------+ | 20 | | 50 | +--------+
क्वेरी: A में जो B में नहीं
mysql> SELECT * FROM A WHERE Value NOT IN (SELECT Value2 FROM B);
परिणाम
+-------+ | Value | +-------+ | 10 | | 30 | | 80 | +-------+
वैकल्पिक तरीके
LEFT JOIN + IS NULL
SELECT A.* FROM A LEFT JOIN B ON A.Value = B.Value2 WHERE B.Value2 IS NULL;
NOT EXISTS
SELECT * FROM A WHERE NOT EXISTS (SELECT 1 FROM B WHERE B.Value2 = A.Value);
तुलना
| विधि | NULL हैंडलिंग | प्रदर्शन | पठनीयता |
|---|---|---|---|
| NOT IN | सबक्वेरी में NULL होने पर कोई पंक्ति नहीं लौटाता | अच्छा | सरल |
| LEFT JOIN | सही ढंग से काम करता है | अच्छा (इंडेक्स के साथ) | मध्यम |
| NOT EXISTS | सही ढंग से काम करता है | अच्छा | स्पष्ट |
चेतावनी
NOT IN सबक्वेरी में NULL होने पर अप्रत्याशित परिणाम देता है। NOT EXISTS या LEFT JOIN अधिक सुरक्षित।