Warnung des Herausgebers:Diese Lösung ist rechenineffizient und kann Ihre Verbindung für eine große Tabelle unterbrechen.
NB - Sie brauchen dies zunächst an einer Probekopie zu tun Ihres Tisches!
Als ich es tat, fand ich das, es sei denn, ich fügte auch AND n1.id <> n2.id
hinzu , es hat jede Zeile in der Tabelle gelöscht.
-
Wenn Sie die Zeile mit der niedrigsten
id
behalten möchten Wert:DELETE n1 FROM names n1, names n2 WHERE n1.id > n2.id AND n1.name = n2.name
-
Wenn Sie die Zeile mit der höchsten
id
behalten möchten Wert:DELETE n1 FROM names n1, names n2 WHERE n1.id < n2.id AND n1.name = n2.name
Ich habe diese Methode in MySQL 5.1
verwendetBei anderen Versionen bin ich mir nicht sicher.
Aktualisierung:Da Leute, die nach dem Entfernen von Duplikaten googeln, hier landen
Obwohl sich die Frage des OP auf DELETE
bezieht , beachten Sie bitte, dass Sie INSERT
verwenden und DISTINCT
ist viel schneller. Für eine Datenbank mit 8 Millionen Zeilen dauerte die folgende Abfrage 13 Minuten, während DELETE
verwendet wurde , es dauerte mehr als 2 Stunden und wurde dennoch nicht abgeschlossen.
INSERT INTO tempTableName(cellId,attributeId,entityRowId,value)
SELECT DISTINCT cellId,attributeId,entityRowId,value
FROM tableName;