Sie können diese Abfrage verwenden, um alle doppelten Einträge zu löschen, wobei der früheste übrig bleibt:
DELETE d
FROM discog d
JOIN discog d1 ON d1.artist = d.artist AND d1.track = d.track AND d1.year < d.year;
Aktualisieren
Eine alternative Lösung, die für wirklich große Tabellen effizienter sein sollte, besteht darin, eine Kopie zu erstellen und einen UNIQUE-Index für die Zeilen zu verwenden, um doppeltes Einfügen zu verhindern:
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;
Der eindeutige Schlüssel befindet sich auf der Kombination des Künstlernamens und des Titelnamens und ermöglicht so Künstlern, verschiedene Titel zu haben, und verschiedenen Künstlern, den gleichen Titelnamen zu haben. Da die SELECT
Teil der Abfrage hat ORDER BY
Jahr, wird zuerst die (Künstler, Titel, Jahr)-Kombination mit dem niedrigsten Jahr eingefügt und dann werden andere identische (Künstler, Titel) Datensätze aufgrund des doppelten Schlüssels nicht eingefügt.