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

Quelle est la meilleure façon de supprimer les valeurs en double de la table MySQL ?

Tout d'abord, vous pouvez essayer d'ajouter des index aux champs ProgramName et CustID si vous ne les avez pas déjà.

Déduplication

Vous pouvez regrouper vos enregistrements pour identifier les doublons et, ce faisant, saisir la valeur d'ID minimale pour chaque groupe. Ensuite, supprimez simplement tous les enregistrements dont l'ID n'est pas l'un des MinID.

Méthode In-Clause

delete from
 ProgramsList
where
 id not in 
    (select min(id) as MinID
      from ProgramsList
      group by ProgramName, CustID) 

Join-Methode

Vous devrez peut-être l'exécuter plusieurs fois, s'il y a beaucoup de membres par groupe.

DELETE P
FROM ProgramsList as P
INNER JOIN 
    (select count(*) as Count, max(id) as MaxID
     from ProgramsList
     group by ProgramName, CustID) as A on A.MaxID = P.id
WHERE A.Count >= 2

Certaines personnes ont des problèmes de performances avec In-Clause, d'autres non. Cela dépend beaucoup de vos index et autres. Si l'un est trop lent, essayez l'autre.

En relation :https://stackoverflow.com/a/4192849/127880