Puoi utilizzare questa query per eliminare tutte le voci duplicate, lasciando la prima:
DELETE d
FROM discog d
JOIN discog d1 ON d1.artist = d.artist AND d1.track = d.track AND d1.year < d.year;
Aggiorna
Una soluzione alternativa che dovrebbe essere più efficiente per tabelle molto grandi è creare una copia, utilizzando un indice UNICO sulle righe per evitare inserimenti duplicati:
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;
La chiave univoca si trova sulla combinazione del nome dell'artista e del nome del brano e quindi consentirà agli artisti di avere brani diversi e artisti diversi di avere lo stesso nome del brano. Perché il SELECT
parte della query contiene ORDER BY
anno, inserirà prima la combinazione (artista,brano,anno) con l'anno più basso e poi altri record identici (artista, brano) non verranno inseriti a causa della chiave duplicata.