एकाधिक कॉलम में सटीक समान मान वाली डुप्लिकेट पंक्तियाँ खोजने के लिए GROUP BY + HAVING COUNT(*) > 1 को सबक्वेरी में उपयोग करें।
टेबल बनाएं
mysql> CREATE TABLE DemoTable1861 (
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
Name VARCHAR(20),
Marks INT
);
डेटा डालें
mysql> INSERT INTO DemoTable1861(Name, Marks) VALUES('John', 45);
mysql> INSERT INTO DemoTable1861(Name, Marks) VALUES('Chris', 74);
mysql> INSERT INTO DemoTable1861(Name, Marks) VALUES('David', 89);
mysql> INSERT INTO DemoTable1861(Name, Marks) VALUES('Chris', 74); -- डुप्लिकेट
mysql> INSERT INTO DemoTable1861(Name, Marks) VALUES('John', 49);
डुप्लिकेट (Name+Marks दोनों समान) खोजें
mysql> SELECT Id, Name, Marks FROM DemoTable1861
WHERE (Name, Marks) IN (
SELECT Name, Marks FROM DemoTable1861
GROUP BY Name, Marks
HAVING COUNT(*) > 1
);
आउटपुट:
+----+-------+-------+ | Id | Name | Marks | +----+-------+-------+ | 2 | Chris | 74 | | 4 | Chris | 74 | +----+-------+-------+
व्याख्या
- सबक्वेरी: (Name, Marks) समूह जिनकी गणना > 1 है → केवल
('Chris', 74)। - मुख्य क्वेरी: उन समूहों से मेल खाने वाली सभी पंक्तियाँ लौटाती है।
विकल्प: विंडो फ़ंक्शन (MySQL 8.0+)
SELECT Id, Name, Marks FROM (
SELECT *, COUNT(*) OVER (PARTITION BY Name, Marks) AS cnt
FROM DemoTable1861
) t WHERE cnt > 1;
सिंगल कॉलम डुप्लिकेट के लिए सरल क्वेरी
SELECT Name FROM DemoTable1861 GROUP BY Name HAVING COUNT(*) > 1;
नोट
(col1, col2) IN (subquery)को रो कंस्ट्रक्टर तुलना कहते हैं।- इंडेक्स
(Name, Marks)पर होने से सबक्वेरी तेज़ होगी। - डुप्लिकेट हटाने के लिए:
DELETE t1 FROM table t1 JOIN table t2 ...पैटर्न उपयोग करें।