Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

ลบข้อมูลซ้ำด้วย LEFT JOIN ใน MySQL

ใช้ LEFT JOIN กับ Subquery ที่หา Id ต่ำสุดของแต่ละชื่อ แล้วลบแถวที่ไม่เข้ากลุ่ม (Id IS NULL)

สร้างตารางและเพิ่มข้อมูลซ้ำ

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)

คิวรี DELETE ด้วย 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)

ตรรกะ: Subquery หา Id น้อยสุด (min) ของแต่ละชื่อ → LEFT JOIN → แถวที่ไม่จับคู่ (tbl1.Id IS NULL) คือข้อมูลซ้ำ → ลบทิ้ง