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

MySQL में डुप्लीकेट रिकॉर्ड हटाकर एक रिकॉर्ड कैसे रखें?

सेल्फ-जॉइन के साथ DELETE से डुप्लीकेट हटाएं

डुप्लीकेट मान वाली पंक्तियों में से केवल एक रखकर बाकी हटाने के लिए सेल्फ-जॉइन के साथ DELETE स्टेटमेंट का उपयोग करें।

टेबल और डेटा

mysql> CREATE TABLE DemoTable (
    StudentId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    StudentName VARCHAR(40)
);

mysql> INSERT INTO DemoTable(StudentName) VALUES('John'), ('Carol'), ('Sam'), ('Carol'), ('David'), ('Carol');

मूल डेटा (Carol 3 बार)

mysql> SELECT * FROM DemoTable;

+-----------+-------------+
| StudentId | StudentName |
+-----------+-------------+
| 1         | John        |
| 2         | Carol       |
| 3         | Sam         |
| 4         | Carol       |
| 5         | David       |
| 6         | Carol       |
+-----------+-------------+

डुप्लीकेट हटाने की क्वेरी

mysql> DELETE tbl1 FROM DemoTable tbl1, DemoTable tbl2 
    -> WHERE tbl1.StudentName = tbl2.StudentName 
    -> AND tbl1.StudentId > tbl2.StudentId;
Query OK, 2 rows affected (0.79 sec)

परिणाम (Carol का केवल पहला रिकॉर्ड बचा)

mysql> SELECT * FROM DemoTable;

+-----------+-------------+
| StudentId | StudentName |
+-----------+-------------+
| 1         | John        |
| 2         | Carol       |
| 3         | Sam         |
| 5         | David       |
+-----------+-------------+

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

  1. टेबल को स्वयं से जॉइन करता है (tbl1 और tbl2)
  2. समान नाम वाली पंक्तियां मिलाता है
  3. tbl1.StudentId > tbl2.StudentId - बड़ी ID वाली पंक्ति को हटाता है (पहली/सबसे छोटी ID बचती है)

आधुनिक विकल्प (MySQL 8.0+)

-- ROW_NUMBER() विंडो फ़ंक्शन के साथ
WITH ranked AS (
    SELECT *, ROW_NUMBER() OVER (PARTITION BY StudentName ORDER BY StudentId) AS rn
    FROM DemoTable
)
DELETE FROM DemoTable WHERE StudentId IN (
    SELECT StudentId FROM ranked WHERE rn > 1
);

रोकथाम: UNIQUE कंस्ट्रेंट

ALTER TABLE DemoTable ADD UNIQUE KEY unique_name (StudentName);
  1. - MySQL में DELETE LIMIT 1 से डुप्लिकेट में से एक रिकॉर्ड हटाएं

    डुप्लिकेट रिकॉर्ड वाली टेबल से केवल एक रिकॉर्ड हटाने के लिए DELETE ... LIMIT 1 का उपयोग करें। सिंटैक्स DELETE FROM टेबल_नाम WHERE कॉलम_नाम = मान LIMIT 1; उदाहरण 1. टेबल बनाएं CREATE TABLE DemoTable (Amount INT); 2. डेटा डालें (50 तीन बार) INSERT INTO DemoTable VALUES(50), (100), (50), (70), (9

  1. - MySQL में संबंधित डुप्लिकेट रिकॉर्ड का योग करें

    आइए पहले एक टेबल बनाते हैं: mysql> create table DemoTable -> ( -> StudentName varchar(20), -> StudentMarks int -> ); Query OK, 0 rows affected (0.68 sec) इन्सर्ट कमांड का उपयोग करके टेबल में कुछ रिकॉर्ड डालें: mysql> insert into DemoTable values(Chris,50); Query OK, 1 row affected

  1. - MySQL में विशिष्ट मान से कम मान वाले रिकॉर्ड छोड़कर बाकी कैसे चुनें?

    WHERE क्लॉज का उपयोग निर्दिष्ट मान से बड़े मान वाले रिकॉर्ड प्राप्त करने के लिए: yourValue; उदाहरण insert into demo27(value) values(50), (500), (100), (400), (100), (800), (600); 500 से बड़े मान चुनना 500; +----+-------+ | id | value | +----+-------+ | 6 | 800 | | 7 | 600 | +----+-------