Warnung des Herausgebers: Diese Lösung ist rechnerisch ineffizient und kann Ihre Verbindung bei einer großen Tabelle zum Erliegen bringen.
NB - Sie necesito dies zunächst auf einer Testexemplar Ihres Tisches!
Dabei habe ich festgestellt, dass ich nur dann etwas tun kann, wenn ich auch AND n1.id <> n2.id
wird jede Zeile der Tabelle gelöscht.
-
Wenn Sie die Zeile mit dem niedrigsten Wert behalten wollen id
Wert:
DELETE n1 FROM names n1, names n2 WHERE n1.id > n2.id AND n1.name = n2.name
-
Wenn Sie die Zeile mit dem höchsten Wert behalten wollen id
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 verwendet
Bei anderen Versionen bin ich mir nicht sicher.
Update: Da Leute, die nach dem Entfernen von Duplikaten googeln, hier landen
Obwohl sich die Frage des Auftraggebers auf DELETE
Bitte beachten Sie, dass die Verwendung von INSERT
y DISTINCT
ist viel schneller. Bei einer Datenbank mit 8 Millionen Zeilen dauerte die folgende Abfrage 13 Minuten, während die DELETE
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;
43 Stimmen
Duplikat von stackoverflow.com/questions/3311903/ y stackoverflow.com/questions/2867530/ (Ironischerweise.)
29 Stimmen
Es handelt sich nicht um eine exakte Frage nach Duplikaten, da hier speziell nach einem DELETE-Befehl gefragt wird, der dieselbe Aktion ausführt, die ein ALTER-Befehl, der einen eindeutigen Index hinzufügt, benötigen würde, damit MySQL automatisch doppelte Zeilen entfernt. In diesem Fall wählen wir aus, wie genau wir die Duplikate löschen wollen.
1 Stimmen
Eine Frage über Duplikate hat also Duplikate? Hmm