Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> MySQL

MySQL में उन पंक्तियों को कैसे चुनें जहां कॉलम में एक से अधिक रिकॉर्ड में समान डेटा हो?

सेल्फ-जॉइन से डुप्लीकेट मान वाली पंक्तियाँ खोजें

किसी कॉलम में डुप्लीकेट मान वाली सभी पंक्तियाँ खोजने के लिए सेल्फ-जॉइन (JOIN टेबल को स्वयं से) का उपयोग करें।

टेबल और डेटा

mysql> CREATE TABLE DemoTable (UserId INT, UserName VARCHAR(20));
mysql> INSERT INTO DemoTable VALUES(10,'John'), (11,'Sam'), (12,'Larry'), (13,'David'), (14,'Larry');

डेटा देखना

mysql> SELECT * FROM DemoTable;

+--------+----------+
| UserId | UserName |
+--------+----------+
| 10     | John     |
| 11     | Sam      |
| 12     | Larry    |
| 13     | David    |
| 14     | Larry    |
+--------+----------+

डुप्लीकेट खोजने की क्वेरी

mysql> SELECT DISTINCT tbl1.* 
    -> FROM DemoTable tbl1 
    -> JOIN DemoTable tbl2 
    -> ON tbl2.UserId <> tbl1.UserId AND tbl2.UserName = tbl1.UserName;

+--------+----------+
| UserId | UserName |
+--------+----------+
| 14     | Larry    |
| 12     | Larry    |
+--------+----------+

कैसे काम करता है

  1. टेबल को दो एलियास (tbl1, tbl2) के साथ जॉइन करता है
  2. tbl2.UserId <> tbl1.UserId - स्वयं से जुड़ने से रोकता है
  3. tbl2.UserName = tbl1.UserName - समान नाम वाली पंक्तियाँ मिलाता है
  4. DISTINCT - डुप्लीकेट परिणाम पंक्तियाँ हटाता है

बेहतर विकल्प: GROUP BY + HAVING

-- केवल डुप्लीकेट मान दिखाना
SELECT UserName FROM DemoTable 
GROUP BY UserName 
HAVING COUNT(*) > 1;

-- डुप्लीकेट वाली सभी पंक्तियाँ
SELECT * FROM DemoTable 
WHERE UserName IN (
    SELECT UserName FROM DemoTable 
    GROUP BY UserName 
    HAVING COUNT(*) > 1
);

डुप्लीकेट गिनती के साथ

SELECT UserName, COUNT(*) AS cnt 
FROM DemoTable 
GROUP BY UserName 
HAVING cnt > 1;

प्रदर्शन नोट

बड़े टेबल पर GROUP BY ... HAVING दृष्टिकोण आमतौर पर सेल्फ-जॉइन से तेज होता है, विशेष रूप से जब कॉलम इंडेक्स्ड हो।

  1. - MySQL में एक टेबल से डेटा चुनना जहाँ कॉलम मान दूसरी टेबल से मेल खाएँ

    EXISTS सबक्वेरी से क्रॉस-टेबल मिलान EXISTS सबक्वेरी का उपयोग करके एक टेबल की पंक्तियाँ चुनें जहाँ कॉलम मान दूसरी टेबल के कॉलम मान से मेल खाता हो। पहली टेबल (विषय) (111, MySQL), (112, MongoDB), (113, Java), (114, C), (115, MySQL); दूसरी टेबल (छात्र) (Chris, MySQL), (Bob, MySQL), (Sam, MySQL), (C

  1. - MySQL में पंक्तियों को एक बैच में एक समय पर चुनना

    LIMIT और OFFSET से पेजिनेशन/बैच प्रोसेसिंग LIMIT offset, count या LIMIT count OFFSET offset का उपयोग करके परिणाम सेट को बैच में विभाजित करें। तालिका और डेटा (David), (Robert), (Adam), (John), (Jace); क्वेरी: 5वीं से 8वीं पंक्ति (बैच आकार 4, ऑफसेट 4) SELECT * FROM DemoTable1514 LIMIT 4 OFFSET 4;

  1. - MySQL में GROUP BY HAVING से डुप्लिकेट मान ढूंढें

    MySQL में 1 का उपयोग करके उन मानों को ढूंढ सकते हैं जो टेबल में एक से अधिक बार आते हैं। सिंटैक्स 1; उदाहरण 1. टेबल बनाएं ); 2. डेटा डालें (कुछ डुप्लिकेट के साथ) INSERT INTO DemoTable VALUES(50); 3. सभी रिकॉर्ड देखें SELECT * FROM DemoTable; +-------+ | Value | +-------+ | 20 | | 10 |