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

MySQL में डुप्लीकेट पंक्तियों को खोजने के 4 तरीके

यदि आपको लगता है कि एक MySQL तालिका में डुप्लिकेट पंक्तियाँ हो सकती हैं, तो आप सभी डुप्लिकेट वापस करने के लिए निम्न विकल्पों का उपयोग कर सकते हैं।

नमूना डेटा

मान लीजिए हमारे पास निम्न डेटा वाली एक तालिका है:

SELECT * FROM Pets;

परिणाम:

+-------+---------+---------+
| PetId | PetName | PetType |
+-------+---------+---------+
|     1 | Wag     | Dog     |
|     1 | Wag     | Dog     |
|     2 | Scratch | Cat     |
|     3 | Tweet   | Bird    |
|     4 | Bark    | Dog     |
|     4 | Bark    | Dog     |
|     4 | Bark    | Dog     |
+-------+---------+---------+

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

विकल्प 1

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

SELECT 
    DISTINCT PetId, 
    COUNT(*) AS "Count"
FROM Pets
GROUP BY PetId
ORDER BY PetId;

परिणाम:

+-------+-------+
| PetId | Count |
+-------+-------+
|     1 |     2 |
|     2 |     1 |
|     3 |     1 |
|     4 |     3 |
+-------+-------+

हम SELECT . का विस्तार कर सकते हैं यदि आवश्यक हो तो और कॉलम शामिल करने के लिए सूची:

SELECT 
    PetId,
    PetName,
    PetType,
    COUNT(*) AS "Count"
FROM Pets
GROUP BY 
    PetId,
    PetName,
    PetType
ORDER BY PetId;

परिणाम:

+-------+---------+---------+-------+
| PetId | PetName | PetType | Count |
+-------+---------+---------+-------+
|     1 | Wag     | Dog     |     2 |
|     2 | Scratch | Cat     |     1 |
|     3 | Tweet   | Bird    |     1 |
|     4 | Bark    | Dog     |     3 |
+-------+---------+---------+-------+

हम डुप्लिकेट को अवरोही क्रम में गिनती के आधार पर पहले प्रदर्शित कर सकते हैं:

SELECT 
    PetId,
    PetName,
    PetType,
    COUNT(*) AS "Count"
FROM Pets
GROUP BY 
    PetId,
    PetName,
    PetType
ORDER BY Count DESC;

परिणाम:

+-------+---------+---------+-------+
| PetId | PetName | PetType | Count |
+-------+---------+---------+-------+
|     4 | Bark    | Dog     |     3 |
|     1 | Wag     | Dog     |     2 |
|     2 | Scratch | Cat     |     1 |
|     3 | Tweet   | Bird    |     1 |
+-------+---------+---------+-------+

विकल्प 2

यदि हम केवल डुप्लीकेट पंक्तियों को सूचीबद्ध करना चाहते हैं, तो हम HAVING . का उपयोग कर सकते हैं गैर-डुप्लिकेट को आउटपुट से बाहर करने के लिए क्लॉज:

SELECT 
    PetId,
    PetName,
    PetType,
    COUNT(*) AS "Count"
FROM Pets
GROUP BY 
    PetId,
    PetName,
    PetType
HAVING COUNT(*) > 1
ORDER BY PetId;

परिणाम:

+-------+---------+---------+-------+
| PetId | PetName | PetType | Count |
+-------+---------+---------+-------+
|     1 | Wag     | Dog     |     2 |
|     4 | Bark    | Dog     |     3 |
+-------+---------+---------+-------+

विकल्प 3

इसे करने का दूसरा तरीका ROW_NUMBER() . का उपयोग करना है PARTITION BY . के साथ कार्य करें परिणाम सेट के आउटपुट को क्रमांकित करने के लिए क्लॉज।

SELECT 
    *, 
    ROW_NUMBER() OVER ( 
        PARTITION BY PetId, PetName, PetType 
        ORDER BY PetId, PetName, PetType
        ) AS rn
FROM Pets;

परिणाम:

+-------+---------+---------+----+
| PetId | PetName | PetType | rn |
+-------+---------+---------+----+
|     1 | Wag     | Dog     |  1 |
|     1 | Wag     | Dog     |  2 |
|     2 | Scratch | Cat     |  1 |
|     3 | Tweet   | Bird    |  1 |
|     4 | Bark    | Dog     |  1 |
|     4 | Bark    | Dog     |  2 |
|     4 | Bark    | Dog     |  3 |
+-------+---------+---------+----+

PARTITION BY क्लॉज FROM . द्वारा निर्मित परिणाम सेट को विभाजित करता है विभाजन में खंड जिस पर फ़ंक्शन लागू होता है। जब हम परिणाम सेट के लिए विभाजन निर्दिष्ट करते हैं, तो प्रत्येक विभाजन नंबरिंग को फिर से शुरू करने का कारण बनता है (यानी प्रत्येक विभाजन में पहली पंक्ति के लिए नंबरिंग 1 से शुरू होगी)।

विकल्प 4

मिलान करने वाले डुप्लीकेट से केवल अधिशेष पंक्तियों को वापस करने के लिए, हम उपरोक्त क्वेरी को सामान्य तालिका अभिव्यक्ति के रूप में उपयोग कर सकते हैं, जैसे:

WITH cte AS 
    (
        SELECT 
            *, 
            ROW_NUMBER() OVER ( 
                PARTITION BY PetId, PetName, PetType 
                ORDER BY PetId, PetName, PetType
                ) AS rn
        FROM Pets
    )
SELECT * FROM cte WHERE rn <> 1;

परिणाम:

+-------+---------+---------+----+
| PetId | PetName | PetType | rn |
+-------+---------+---------+----+
|     1 | Wag     | Dog     |  2 |
|     4 | Bark    | Dog     |  2 |
|     4 | Bark    | Dog     |  3 |
+-------+---------+---------+----+

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. JSON_TYPE () - MySQL में JSON मान का प्रकार प्राप्त करें

  2. जोड़ें () उदाहरण – MySQL

  3. क्या टेबल फ़ील्ड में हाइफ़न हो सकता है?

  4. MySQL में डेटाबेस के आकार की जांच कैसे करें

  5. घातक त्रुटि:न आया हुआ अपवाद 'mysqli_sql_exception' संदेश के साथ 'क्वेरी/तैयार कथन में प्रयुक्त कोई अनुक्रमणिका नहीं'