एक कॉलम में विशिष्ट मान नहीं रखने वाले रिकॉर्ड खोजने के लिए सबक्वेरी के साथ NOT IN का उपयोग करें।
टेबल बनाएं
mysql> CREATE TABLE DemoTable1840 (
UserName VARCHAR(20),
UserType ENUM('GUEST','ADMIN')
);
डेटा डालें
mysql> INSERT INTO DemoTable1840 VALUES('Chris','Admin');
mysql> INSERT INTO DemoTable1840 VALUES('David','Guest');
mysql> INSERT INTO DemoTable1840 VALUES('Chris','Guest');
डेटा देखें
+----------+----------+ | UserName | UserType | +----------+----------+ | Chris | ADMIN | | David | GUEST | | Chris | GUEST | +----------+----------+
Admin न होने वाले यूजर खोजें
mysql> SELECT UserName FROM DemoTable1840
WHERE UserName NOT IN (
SELECT UserName FROM DemoTable1840 WHERE UserType = 'Admin'
);
आउटपुट:
+----------+ | UserName | +----------+ | David | +----------+
व्याख्या
- सबक्वेरी:
'Chris'लौटाती है (क्योंकि Chris का Admin रिकॉर्ड है)। - मुख्य क्वेरी: Chris को छोड़कर बाकी नाम चुनती है →
David।
बेहतर विकल्प: NOT EXISTS
mysql> SELECT UserName FROM DemoTable1840 t1
WHERE NOT EXISTS (
SELECT 1 FROM DemoTable1840 t2
WHERE t2.UserName = t1.UserName AND t2.UserType = 'Admin'
);
क्यों NOT EXISTS बेहतर?
NOT INमें सबक्वेरीNULLलौटाए तो कोई परिणाम नहीं मिलता।NOT EXISTSNULL-सुरक्षित है और अक्सर तेज़ होता है।- बड़ी टेबल पर
LEFT JOIN ... WHERE t2.id IS NULLभी अच्छा विकल्प।