उपक्वेरी में HAVING COUNT < 2 से अद्वितीय ID खोजना
जिन ID की केवल एक पंक्ति हो (डुप्लिकेट न हो), उन्हें खोजने के लिए उपक्वेरी में GROUP BY ... HAVING COUNT(*) < 2 का उपयोग करें, फिर मुख्य क्वेरी में IN से फ़िल्टर करें।
टेबल और डेटा
mysql> CREATE TABLE DemoTable (
Id INT,
ColorName VARCHAR(100)
);
Query OK, 0 rows affected (0.56 sec)
mysql> INSERT INTO DemoTable VALUES(100,'Red'); Query OK, 1 row affected (0.11 sec) mysql> INSERT INTO DemoTable VALUES(101,'Green'); Query OK, 1 row affected (0.20 sec) mysql> INSERT INTO DemoTable VALUES(101,'Blue'); Query OK, 1 row affected (0.28 sec) mysql> INSERT INTO DemoTable VALUES(102,'Yellow'); Query OK, 1 row affected (0.18 sec) mysql> INSERT INTO DemoTable VALUES(100,'Purple'); Query OK, 1 row affected (0.12 sec) mysql> INSERT INTO DemoTable VALUES(100,'Black'); Query OK, 1 row affected (0.26 sec)
सभी रिकॉर्ड
mysql> SELECT * FROM DemoTable;
+------+-----------+ | Id | ColorName | +------+-----------+ | 100 | Red | | 101 | Green | | 101 | Blue | | 102 | Yellow | | 100 | Purple | | 100 | Black | +------+-----------+ 6 rows in set (0.00 sec)
गैर-डुप्लिकेट ID (केवल एक बार आने वाले) वाले रिकॉर्ड
mysql> SELECT * FROM DemoTable
WHERE Id IN (SELECT Id FROM DemoTable GROUP BY Id HAVING COUNT(*) < 2);
परिणाम:
+------+-----------+ | Id | ColorName | +------+-----------+ | 102 | Yellow | +------+-----------+ 1 row in set (0.07 sec)
व्याख्या: उपक्वेरी: Id 100 (3 बार), 101 (2 बार), 102 (1 बार)। HAVING COUNT(*) < 2 केवल 102 देता है। मुख्य क्वेरी Id 102 वाली पंक्ति लौटाती है।
वैकल्पिक (MySQL 8.0+): SELECT * FROM (SELECT *, COUNT(*) OVER (PARTITION BY Id) AS cnt FROM DemoTable) t WHERE cnt = 1;