Mysql
 sql >> Base de données >  >> RDS >> Mysql

Supprimer les doublons basés sur deux colonnes et conserver la ligne qui a la valeur minimale d'une autre colonne

Vous pouvez utiliser cette requête pour supprimer toutes les entrées en double, en laissant la plus ancienne :

DELETE d
FROM discog d
JOIN discog d1 ON d1.artist = d.artist AND d1.track = d.track AND d1.year < d.year;

Mettre à jour

Une solution alternative qui devrait être plus efficace pour les très grandes tables consiste à créer une copie, en utilisant un index UNIQUE sur les lignes pour éviter l'insertion en double :

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 clé unique est sur la combinaison du nom de l'artiste et du nom de la piste, ce qui permettra aux artistes d'avoir différentes pistes et à différents artistes d'avoir le même nom de piste. Parce que le SELECT une partie de la requête a ORDER BY année, il insérera d'abord la combinaison (artiste, piste, année) avec l'année la plus basse, puis les autres enregistrements identiques (artiste, piste) ne seront pas insérés en raison de la clé en double.

Démo sur rextester