COUNT(DISTINCT ...) और IN() के साथ मल्टीपल रो अस्तित्व जांच
निर्दिष्ट ID मानों वाली सभी पंक्तियाँ मौजूद हैं या नहीं जांचने के लिए COUNT(DISTINCT Id) की तुलना अपेक्षित संख्या से करें।
आइए पहले एक टेबल बनाते हैं:
mysql> CREATE TABLE DemoTable1219 (
Id INT,
Name VARCHAR(40)
);
रिकॉर्ड्स इन्सर्ट करें:
mysql> INSERT INTO DemoTable1219 VALUES (100, 'Adam'); mysql> INSERT INTO DemoTable1219 VALUES (101, 'John'); mysql> INSERT INTO DemoTable1219 VALUES (102, 'Chris'); mysql> INSERT INTO DemoTable1219 VALUES (103, 'Bob');
सभी रिकॉर्ड्स देखें:
mysql> SELECT * FROM DemoTable1219;
आउटपुट:
+------+-------+ | Id | Name | +------+-------+ | 100 | Adam | | 101 | John | | 102 | Chris | | 103 | Bob | +------+-------+
ID 100, 103, 102 वाली सभी 3 पंक्तियाँ मौजूद हैं या नहीं जांचने के लिए क्वेरी:
mysql> SELECT COUNT(DISTINCT Id) = 3
FROM DemoTable1219
WHERE Id IN (100, 103, 102);
आउटपुट:
+----------------------+ | COUNT(DISTINCT Id)=3 | +----------------------+ | 1 | +----------------------+
व्याख्या:
- WHERE Id IN (100, 103, 102): केवल इन 3 ID वाली पंक्तियाँ चुनता है
- COUNT(DISTINCT Id): मिली अनोखी ID की संख्या गिनता है
- = 3: अपेक्षित संख्या (3) से तुलना करता है
- परिणाम 1 (सत्य): सभी 3 ID मौजूद हैं
- परिणाम 0 (असत्य): कोई ID गायब है
क्यों COUNT(DISTINCT)? यदि टेबल में डुप्लिकेट ID हैं (यूनिक कंस्ट्रेंट नहीं), तो COUNT(*) गलत काउंट दे सकता है। DISTINCT सही काउंट सुनिश्चित करता है।
वैकल्पिक तरीके:
-- तरीका 1: EXISTS के साथ (प्रत्येक ID के लिए) SELECT * FROM DemoTable1219 WHERE Id = 100; SELECT * FROM DemoTable1219 WHERE Id = 103; SELECT * FROM DemoTable1219 WHERE Id = 102; -- तरीका 2: LEFT JOIN के साथ (लापता ID खोजने के लिए) SELECT ids.id FROM (SELECT 100 AS id UNION SELECT 103 UNION SELECT 102) ids LEFT JOIN DemoTable1219 d ON ids.id = d.Id WHERE d.Id IS NULL; -- लापता ID लौटाता है
नोट: MySQL में बूलियन परिणाम 1 (सत्य) या 0 (असत्य) के रूप में प्रदर्शित होता है।