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

Xóa các hàng trùng lặp (duplicate rows) trong MySQL dùng DELETE JOIN

Giới thiệu

Để xóa hàng trùng lặp dựa trên giá trị cột (giữ lại 1 hàng), dùng DELETE với INNER JOIN tự tham chiếu (self-join), so sánh khóa chính để giữ hàng có ID lớn hơn (hoặc nhỏ hơn).

Ví dụ minh họa

Bước 1: Tạo bảng và chèn dữ liệu trùng

CREATE TABLE demo14 (
    id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(30)
);
INSERT INTO demo14 (name) VALUES ('John'), ('David'), ('David'), ('Bob'), ('John'), ('Carol');

Bước 2: Xóa trùng, giữ hàng có id LỚN HƠN (xuất hiện sau)

DELETE tbl1 FROM demo14 tbl1
INNER JOIN demo14 tbl2
WHERE tbl1.id < tbl2.id
  AND tbl1.name = tbl2.name;

Giải thích: Join bảng với chính nó. Điều kiện tbl1.id < tbl2.id đảm bảo cặp (id nhỏ, id lớn) chỉ xuất hiện 1 lần. tbl1.name = tbl2.name xác định trùng lặp. DELETE tbl1 xóa hàng có id nhỏ hơn.

Bước 3: Kết quả (giữ id 3,4,5,6)

SELECT * FROM demo14;
+----+-------+
| id | name  |
+----+-------+
| 3  | David |
| 4  | Bob   |
| 5  | John  |
| 6  | Carol |
+----+-------+

Mẹo: Để giữ hàng đầu tiên (id nhỏ), đổi thành tbl1.id > tbl2.id. Luôn backup trước khi chạy DELETE.