MySQL में किसी कॉलम में डुप्लिकेट मानों वाली सभी पंक्तियों को एक बार में हटाने के लिए DELETE के साथ JOIN (सेल्फ-जॉइन) का उपयोग करें।
सिंटैक्स
DELETE t1 FROM table_name t1 JOIN table_name t2 ON t1.duplicate_column = t2.duplicate_column WHERE t2.duplicate_column = 'value_to_delete';
व्यावहारिक उदाहरण
1. टेबल बनाएं और डुप्लिकेट डेटा डालें
mysql> CREATE TABLE DemoTable (
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
FirstName VARCHAR(100)
);
Query OK, 0 rows affected (0.69 sec)
mysql> INSERT INTO DemoTable (FirstName) VALUES
('Chris'), ('Bob'), ('Mike'), ('Adam'), ('Bob'), ('Adam'), ('Bob'), ('Mike');
Query OK, 8 rows affected (0.20 sec)
2. सभी रिकॉर्ड्स देखें
mysql> SELECT * FROM DemoTable; +----+-----------+ | Id | FirstName | +----+-----------+ | 1 | Chris | | 2 | Bob | | 3 | Mike | | 4 | Adam | | 5 | Bob | | 6 | Adam | | 7 | Bob | | 8 | Mike | +----+-----------+ 8 rows in set (0.00 sec)
3. 'Bob' वाली सभी पंक्तियाँ हटाएं (सेल्फ-जॉइन के साथ)
mysql> DELETE DemoTable FROM DemoTable JOIN DemoTable tbl ON DemoTable.FirstName = tbl.FirstName WHERE tbl.FirstName = 'Bob'; Query OK, 3 rows affected (0.15 sec)
4. परिणाम जांचें
mysql> SELECT * FROM DemoTable; +----+-----------+ | Id | FirstName | +----+-----------+ | 1 | Chris | | 3 | Mike | | 4 | Adam | | 6 | Adam | | 8 | Mike | +----+-----------+ 5 rows in set (0.00 sec)
व्याख्या
- टेबल को स्वयं के साथ जॉइन किया जाता है (
DemoTableऔरtbl) ON DemoTable.FirstName = tbl.FirstNameसमान नाम वाली पंक्तियों से मिलान करता हैWHERE tbl.FirstName = 'Bob'केवल 'Bob' वाले समूह को लक्षित करता हैDELETE DemoTable(पहला टेबल एलियास) जॉइन से मेल खाने वाली पंक्तियों को हटाता है
सरल विकल्प (अधिकांश मामलों के लिए)
-- सीधा और स्पष्ट DELETE FROM DemoTable WHERE FirstName = 'Bob';
उपरोक्त सरल क्वेरी समान परिणाम देती है। JOIN दृष्टिकोण जटिल परिदृश्यों के लिए उपयोगी है जैसे:
- डुप्लिकेट समूहों में से केवल कुछ पंक्तियाँ हटाना
- दो अलग टेबल्स के बीच डुप्लिकेट मिलान
- जटिल मिलान शर्तें
सभी डुप्लिकेट हटाएं (एक प्रति रखें)
-- न्यूनतम ID रखें, बाकी हटाएं DELETE t1 FROM DemoTable t1 JOIN DemoTable t2 ON t1.FirstName = t2.FirstName AND t1.Id > t2.Id;
DELETE JOIN सिंटैक्स विविधताएं
-- MySQL विशिष्ट DELETE t1 FROM t1 JOIN t2 ON ... WHERE ... -- मानक SQL (कुछ DB में) DELETE FROM t1 USING t1 JOIN t2 ON ... WHERE ...