Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Xóa bản ghi trùng lặp giữ lại 1 bản ghi trong MySQL

Sử dụng DELETE với self-join để xóa các bản ghi trùng lặp, giữ lại bản ghi có ID nhỏ nhất (hoặc lớn nhất).

Ví dụ

Tạo bảng StudentName có trùng 'Carol' 3 lần:

mysql> create table DemoTable ( 
    StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    StudentName varchar(40) 
); 
Query OK, 0 rows affected (0.48 sec)

Dữ liệu: John(1), Carol(2), Sam(3), Carol(4), David(5), Carol(6)

Xóa trùng lặp giữ ID nhỏ nhất

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)

Kết quả (giữ Carol ID=2, xóa ID=4,6):

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

Giải thích: Self-join bảng với chính nó. Điều kiện tbl1.StudentId > tbl2.StudentId đảm bảo chỉ xóa bản ghi có ID lớn hơn (giữ ID nhỏ nhất).

Cách khác (MySQL 8.0+): Dùng ROW_NUMBER() OVER (PARTITION BY StudentName ORDER BY StudentId) rồi xóa где rn > 1.