Możesz użyć tego zapytania, aby usunąć wszystkie zduplikowane wpisy, pozostawiając najwcześniejszy:
DELETE d
FROM discog d
JOIN discog d1 ON d1.artist = d.artist AND d1.track = d.track AND d1.year < d.year;
Aktualizacja
Alternatywnym rozwiązaniem, które powinno być bardziej wydajne w przypadku naprawdę dużych tabel, jest utworzenie kopii przy użyciu UNIKALNEGO indeksu w wierszach, aby zapobiec wstawianiu duplikatów:
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;
Unikalny klucz znajduje się w kombinacji nazwy wykonawcy i nazwy utworu, dzięki czemu artyści mogą mieć różne utwory i różni artyści mieć tę samą nazwę utworu. Ponieważ SELECT
część zapytania ma ORDER BY
rok, najpierw wstawi kombinację (wykonawca, utwór, rok) z najniższym rokiem, a następnie inne identyczne rekordy (wykonawca, utwór) nie zostaną wstawione z powodu zduplikowanego klucza.