Tento dotaz můžete použít k odstranění všech duplicitních záznamů a ponechat ten nejstarší:
DELETE d
FROM discog d
JOIN discog d1 ON d1.artist = d.artist AND d1.track = d.track AND d1.year < d.year;
Aktualizovat
Alternativní řešení, které by mělo být efektivnější pro opravdu velké tabulky, je vytvořit kopii pomocí UNIQUE indexu na řádcích, aby se zabránilo duplicitnímu vkládání:
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;
Jedinečný klíč je na kombinaci jména interpreta a názvu skladby, a tak to umožní umělcům mít různé skladby a různí umělci mít stejný název skladby. Protože SELECT
část dotazu má ORDER BY
rok, nejprve vloží kombinaci (interpret, skladba, rok) s nejnižším rokem a poté se další identické záznamy (interpret, skladba) nevloží kvůli duplicitnímu klíči.