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

Supprimer les lignes en double d'une table

Oui, en supposant que vous ayez un champ ID unique, vous pouvez supprimer tous les enregistrements qui sont identiques à l'exception de l'ID, mais qui n'ont pas "l'ID minimum" pour leur groupe de valeurs.

Exemple de requête :

DELETE FROM Table
WHERE ID NOT IN
(
SELECT MIN(ID)
FROM Table
GROUP BY Field1, Field2, Field3, ...
)

Remarques :

  • J'ai librement choisi "Table" et "ID" comme noms représentatifs
  • La liste des champs ("Field1, Field2, ...") doit inclure tous les champs à l'exception de l'ID
  • Cela peut être une requête lente en fonction du nombre de champs et de lignes, mais je pense que ce serait bien par rapport aux alternatives

EDIT :Si vous n'avez pas d'index unique, ma recommandation est d'ajouter simplement un index unique auto-incrémental. Principalement parce que c'est un bon design, mais aussi parce qu'il vous permettra d'exécuter la requête ci-dessus.