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

MySQL में LEFT JOIN का उपयोग करके टेबल से डुप्लिकेट मान कैसे हटाएं

आइए पहले एक टेबल बनाते हैं:

mysql> create table DemoTable ( 
    Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    FirstName varchar(100) ); 
Query OK, 0 rows affected (0.46 sec)

इन्सर्ट कमांड का उपयोग करके टेबल में कुछ रिकॉर्ड डालें:

mysql> insert into DemoTable(FirstName) values('Chris'); 
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable(FirstName) values('Robert'); 
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable(FirstName) values('Robert'); 
Query OK, 1 row affected (0.07 sec)
mysql> insert into DemoTable(FirstName) values('John'); 
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable(FirstName) values('John'); 
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable(FirstName) values('Mike'); 
Query OK, 1 row affected (0.09 sec)

सेलेक्ट स्टेटमेंट का उपयोग करके टेबल से सभी रिकॉर्ड प्रदर्शित करें:

mysql> select * from DemoTable;

यह निम्नलिखिक आउटपुट देगा:

+----+-----------+
| Id | FirstName |
+----+-----------+
| 1  | Chris     |
| 2  | Robert    |
| 3  | Robert    |
| 4  | John      |
| 5  | John      |
| 6  | Mike      |
+----+-----------+
6 rows in set (0.00 sec)

MySQL टेबल से डुप्लिकेट मान हटाने की क्वेरी (LEFT JOIN)

mysql> delete tbl from DemoTable tbl left join(
    select min(Id) as Id, FirstName
    from DemoTable
    group by FirstName
) tbl1 ON tbl.Id = tbl1.Id AND tbl.FirstName = tbl1.FirstName
where tbl1.Id IS NULL; 
Query OK, 2 rows affected (0.16 sec)

आइए टेबल रिकॉर्ड एक बार फिर जांचें।

mysql> select * from DemoTable;

यह निम्नलिखिक आउटपुट देगा:

+----+-----------+
| Id | FirstName |
+----+-----------+
| 1  | Chris     |
| 2  | Robert    |
| 4  | John      |
| 6  | Mike      |
+----+-----------+
4 rows in set (0.00 sec)

व्याख्या

  • सबक्वेरी प्रत्येक FirstName के लिए न्यूनतम Id ढूंढती है (पहली घटना रखें)
  • LEFT JOIN मूल टेबल को इस परिणाम से जोड़ता है
  • WHERE tbl1.Id IS NULL वे पंक्तियाँ ढूंढता है जिनका मिलान नहीं हुआ (डुप्लिकेट)
  • उन पंक्तियों को हटा दिया जाता है, प्रत्येक नाम की पहली घटना बनी रहती है

सरल विकल्प (MySQL 8.0+)

DELETE FROM DemoTable
WHERE Id NOT IN (
  SELECT MIN(Id) FROM DemoTable GROUP BY FirstName
);

या ROW_NUMBER() के साथ (8.0+)

WITH cte AS (
  SELECT Id, ROW_NUMBER() OVER (PARTITION BY FirstName ORDER BY Id) as rn
  FROM DemoTable
)
DELETE FROM DemoTable WHERE Id IN (SELECT Id FROM cte WHERE rn > 1);
  1. - MySQL में टेबल जोड़कर (JOIN) मान कैसे प्राप्त करें?

    JOIN का उपयोग दो टेबल को सामान्य कॉलम (PK-FK) पर जोड़ें। टेबल 1: demo52 insert into demo52 values(1,John), (2,David), (3,Mike); टेबल 2: demo53 (FK से demo52) insert into demo53 values(1,23), (2,22), (3,26); JOIN क्वेरी SELECT name FROM demo52 t1 JOIN demo53 t2 ON t1.id=t2.id WHERE t1.id=1; +-

  1. - MySQL में INSERT INTO SELECT से दूसरी टेबल के मान लेकर नई टेबल भरें

    सिंटैक्स insert into targetTable(col1, col2) select sourceCol1, sourceCol2 from sourceTable where condition; उदाहरण insert into demo83(id,username) select id,name from demo82 where id=101; परिणाम +------+----------+ | id | username | +------+----------+ | 101 | Bob | | 101 | David |

  1. - MySQL में JOIN से दूसरी टेबल के ID द्वारा उपयोगकर्ता नाम कैसे प्राप्त करें?

    JOIN सिंटैक्स select username from table1 join table2 on table1.id = table2.fk_id; उदाहरण टेबल 1 (demo77): userid (PK), username insert into demo77 values(1,John), (2,Bob), (3,Mike); टेबल 2 (demo78): id (PK, FK→demo77), countryname insert into demo78 values(1,US), (2,AUS); JOIN क्वेरी और परिणा