Du kan använda den här frågan för att ta bort alla dubbletter, och lämna den tidigaste:
DELETE d
FROM discog d
JOIN discog d1 ON d1.artist = d.artist AND d1.track = d.track AND d1.year < d.year;
Uppdatera
En alternativ lösning som borde vara effektivare för riktigt stora tabeller är att skapa en kopia med hjälp av ett UNIKT index på raderna för att förhindra dubbelinsättning:
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;
Den unika nyckeln finns på kombinationen artistnamn och spårnamn och så kommer det att tillåta artister att ha olika spår och olika artister att ha samma spårnamn. Eftersom SELECT
en del av frågan har ORDER BY
år, kommer den att infoga kombinationen (artist,spår,år) med det lägsta året först och sedan kommer andra identiska (artist, spår)poster inte att infogas på grund av dubblettnyckeln.