Waarschuwing van de redactie:deze oplossing is rekenkundig inefficiënt en kan uw verbinding voor een grote tafel weghalen.
NB - Je hebt nodig om dit eerst te doen op een testkopie van je tafel!
Toen ik het deed, ontdekte ik dat, tenzij ik ook AND n1.id <> n2.id
had opgenomen , het heeft elke rij in de tabel verwijderd.
-
Als u de rij met de laagste
id
. wilt behouden waarde:DELETE n1 FROM names n1, names n2 WHERE n1.id > n2.id AND n1.name = n2.name
-
Als u de rij met de hoogste
id
. wilt behouden waarde:DELETE n1 FROM names n1, names n2 WHERE n1.id < n2.id AND n1.name = n2.name
Ik heb deze methode gebruikt in MySQL 5.1
Niet zeker over andere versies.
Update:aangezien mensen die Googlen voor het verwijderen van duplicaten hier terechtkomen
Hoewel de vraag van de OP gaat over DELETE
, houd er rekening mee dat het gebruik van INSERT
en DISTINCT
gaat veel sneller. Voor een database met 8 miljoen rijen duurde de onderstaande zoekopdracht 13 minuten, bij gebruik van DELETE
, het duurde meer dan 2 uur en is toch niet voltooid.
INSERT INTO tempTableName(cellId,attributeId,entityRowId,value)
SELECT DISTINCT cellId,attributeId,entityRowId,value
FROM tableName;