Bạn có thể sử dụng truy vấn này để xóa tất cả các mục nhập trùng lặp, để lại mục nhập sớm nhất:
DELETE d
FROM discog d
JOIN discog d1 ON d1.artist = d.artist AND d1.track = d.track AND d1.year < d.year;
Cập nhật
Một giải pháp thay thế sẽ hiệu quả hơn cho các bảng thực sự lớn là tạo một bản sao, sử dụng chỉ mục DUY NHẤT trên các hàng để ngăn chèn trùng lặp:
CREATE TABLE discog_copy (id INT, artist VARCHAR(50), track VARCHAR(50), year INT);
ALTER TABLE discog_copy ADD UNIQUE KEY (artist, track);
INSERT IGNORE INTO discog_copy SELECT * FROM discog ORDER BY year;
Khóa duy nhất nằm trên sự kết hợp tên nghệ sĩ và tên bài hát và vì vậy nó sẽ cho phép các nghệ sĩ có các bản nhạc khác nhau và các nghệ sĩ khác nhau có cùng tên bản nhạc. Bởi vì SELECT
một phần của truy vấn có ORDER BY
năm, nó sẽ chèn kết hợp (nghệ sĩ, ca khúc, năm) với năm thấp nhất đầu tiên và sau đó các bản ghi (nghệ sĩ, ca khúc) giống hệt nhau khác sẽ không được chèn do khóa trùng lặp.