Anda dapat menggunakan kueri ini untuk menghapus semua entri duplikat, meninggalkan entri yang paling awal:
DELETE d
FROM discog d
JOIN discog d1 ON d1.artist = d.artist AND d1.track = d.track AND d1.year < d.year;
Perbarui
Solusi alternatif yang seharusnya lebih efisien untuk tabel yang sangat besar adalah membuat salinan, menggunakan indeks UNIK pada baris untuk mencegah penyisipan duplikat:
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;
Kunci uniknya ada di kombinasi nama artis dan nama trek sehingga memungkinkan artis memiliki trek yang berbeda dan artis yang berbeda memiliki nama trek yang sama. Karena SELECT
bagian dari kueri memiliki ORDER BY
tahun, itu akan memasukkan kombinasi (artis,trek,tahun) dengan tahun terendah terlebih dahulu dan kemudian catatan identik lainnya (artis, trek) tidak akan dimasukkan karena kunci duplikat.