MariaDB
 sql >> डेटाबेस >  >> RDS >> MariaDB

मारियाडीबी में डुप्लिकेट पंक्तियों को हटाने के 2 तरीके (प्राथमिक कुंजी को अनदेखा करता है)

जब उन पंक्तियों में प्राथमिक कुंजी या विशिष्ट पहचानकर्ता कॉलम होता है, तो मारियाडीबी में तालिका से डुप्लिकेट पंक्तियों को हटाने के उदाहरण यहां दिए गए हैं।

उदाहरण डुप्लिकेट पंक्तियों को हटाते हैं लेकिन एक रखते हैं। तो दो समान पंक्तियों के मामले में, यह उनमें से एक को हटा देता है और दूसरे को रखता है।

नमूना डेटा

हमारे उदाहरण निम्नलिखित डेटा का उपयोग करते हैं:

SELECT * FROM Dogs;

परिणाम:

+-------+-----------+----------+
| DogId | FirstName | LastName |
+-------+-----------+----------+
|     1 | Bark      | Smith    |
|     2 | Bark      | Smith    |
|     3 | Woof      | Jones    |
|     4 | Ruff      | Robinson |
|     5 | Wag       | Johnson  |
|     6 | Wag       | Johnson  |
|     7 | Wag       | Johnson  |
+-------+-----------+----------+

हम देख सकते हैं कि पहली दो पंक्तियाँ डुप्लिकेट हैं, साथ ही अंतिम तीन पंक्तियाँ भी हैं।

DogId कॉलम अद्वितीय मान रखता है (क्योंकि यह तालिका की प्राथमिक कुंजी है), और इसलिए, कड़ाई से बोलते हुए, कोई डुप्लिकेट नहीं हैं। लेकिन वास्तविक जीवन स्थितियों में, आप अक्सर उन तालिकाओं को डी-डुप्लिकेट करना चाहेंगे जिनमें प्राथमिक कुंजी होती है। इसलिए, इस लेख में हम प्राथमिक कुंजी की उपेक्षा करते हैं, और हम शेष स्तंभों में डुप्लिकेट मानों का पता लगाते हैं।

विकल्प 1

आइए हटाई जाने वाली सभी पंक्तियों को चुनकर अपना पहला विकल्प शुरू करें:

SELECT * FROM Dogs 
WHERE DogId IN (
    SELECT DogId FROM Dogs 
    EXCEPT SELECT MIN(DogId) FROM Dogs 
    GROUP BY FirstName, LastName
    );

परिणाम:

+-------+-----------+----------+
| DogId | FirstName | LastName |
+-------+-----------+----------+
|     2 | Bark      | Smith    |
|     6 | Wag       | Johnson  |
|     7 | Wag       | Johnson  |
+-------+-----------+----------+

उन डुप्लिकेट पंक्तियों को हटाने के लिए, हम SELECT * . को स्विच कर सकते हैं करने के लिए DELETE :

DELETE FROM Dogs 
WHERE DogId IN (
    SELECT DogId FROM Dogs 
    EXCEPT SELECT MIN(DogId) FROM Dogs 
    GROUP BY FirstName, LastName
    );

परिणाम:

Query OK, 3 rows affected (0.017 sec)

और परिणाम को सत्यापित करने के लिए, हम तालिका में शेष सभी पंक्तियों का चयन कर सकते हैं:

SELECT * FROM Dogs;

परिणाम:

+-------+-----------+----------+
| DogId | FirstName | LastName |
+-------+-----------+----------+
|     1 | Bark      | Smith    |
|     3 | Woof      | Jones    |
|     4 | Ruff      | Robinson |
|     5 | Wag       | Johnson  |
+-------+-----------+----------+

हम वैकल्पिक रूप से MAX() . का उपयोग कर सकते हैं MIN() . के बजाय फ़ंक्शन यह बदलने के लिए कार्य करता है कि कौन सी पंक्तियां हटाई गई हैं।

विकल्प 2

इस उदाहरण में हम मान लेंगे कि तालिका को उसकी मूल स्थिति (डुप्लिकेट के साथ) में पुनर्स्थापित कर दिया गया है।

डुप्लिकेट पंक्तियों की जांच के लिए हम निम्नलिखित क्वेरी का उपयोग कर सकते हैं:

SELECT * 
FROM Dogs d1, Dogs d2 
WHERE d1.FirstName = d2.FirstName 
AND d1.LastName = d2.LastName
AND d1.DogId <> d2.DogId 
AND d1.DogId = (
    SELECT MAX(DogId) 
    FROM Dogs d3 
    WHERE d3.FirstName = d1.FirstName 
    AND d3.LastName = d1.LastName
);

परिणाम:

+-------+-----------+----------+-------+-----------+----------+
| DogId | FirstName | LastName | DogId | FirstName | LastName |
+-------+-----------+----------+-------+-----------+----------+
|     2 | Bark      | Smith    |     1 | Bark      | Smith    |
|     7 | Wag       | Johnson  |     5 | Wag       | Johnson  |
|     7 | Wag       | Johnson  |     6 | Wag       | Johnson  |
+-------+-----------+----------+-------+-----------+----------+

और हम डुप्लिकेट को हटाने के लिए उस क्वेरी को संशोधित कर सकते हैं:

DELETE FROM Dogs WHERE DogId IN (
    SELECT d2.DogId 
    FROM Dogs d1, Dogs d2 
    WHERE d1.FirstName = d2.FirstName 
    AND d1.LastName = d2.LastName 
    AND d1.DogId <> d2.DogId 
    AND d1.DogId=( 
        SELECT MIN(DogId) 
        FROM Dogs d3 
        WHERE d3.FirstName = d1.FirstName 
        AND d3.LastName = d1.LastName
    )
);

परिणाम:

Query OK, 3 rows affected (0.075 sec)

तालिका को अब डी-डुप्लिकेट कर दिया गया है।

हम सभी पंक्तियों को फिर से चुनकर इसे सत्यापित कर सकते हैं:

SELECT * FROM Dogs;

परिणाम:

+-------+-----------+----------+
| DogId | FirstName | LastName |
+-------+-----------+----------+
|     1 | Bark      | Smith    |
|     3 | Woof      | Jones    |
|     4 | Ruff      | Robinson |
|     5 | Wag       | Johnson  |
+-------+-----------+----------+

हम उपयोग कर सकते हैं MAX() MIN() . के बजाय यदि पसंद हो तो डुप्लीकेट से अन्य पंक्तियों को हटाने के लिए।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. मारियाडीबी में TIMESTAMPADD () कैसे काम करता है

  2. मास्टर उच्च उपलब्धता प्रबंधक (एमएचए) दुर्घटनाग्रस्त हो गया है! अब मैं क्या करू?

  3. मारियाडीबी SESSION_USER () समझाया गया

  4. कैसे EXTRACTVALUE () मारियाडीबी में काम करता है

  5. मारियाडीबी FOUND_ROWS () समझाया गया