Avertissement de l'éditeur :Cette solution est inefficace en termes de calcul et peut interrompre votre connexion pour une grande table.
NB - Vous avez besoin faire cela d'abord sur une copie de test de votre table !
Quand je l'ai fait, j'ai trouvé cela à moins que j'inclue également AND n1.id <> n2.id
, il a supprimé toutes les lignes du tableau.
-
Si vous souhaitez conserver la ligne avec le plus petit
id
valeur :DELETE n1 FROM names n1, names n2 WHERE n1.id > n2.id AND n1.name = n2.name
-
Si vous souhaitez conserver la ligne avec le
id
le plus élevé valeur :DELETE n1 FROM names n1, names n2 WHERE n1.id < n2.id AND n1.name = n2.name
J'ai utilisé cette méthode dans MySQL 5.1
Pas sûr des autres versions.
Mise à jour :étant donné que les personnes qui recherchent sur Google pour supprimer les doublons se retrouvent ici
Bien que la question de l'OP concerne DELETE
, veuillez noter que l'utilisation de INSERT
et DISTINCT
est beaucoup plus rapide. Pour une base de données avec 8 millions de lignes, la requête ci-dessous a pris 13 minutes, tout en utilisant DELETE
, cela a pris plus de 2 heures et n'a pas encore été terminé.
INSERT INTO tempTableName(cellId,attributeId,entityRowId,value)
SELECT DISTINCT cellId,attributeId,entityRowId,value
FROM tableName;