Redaktörsvarning:Den här lösningen är beräkningsineffektiv och kan försämra din anslutning för ett stort bord.
OBS - Du behöver att göra detta först på en testkopia av ditt bord!
När jag gjorde det upptäckte jag att om jag inte också inkluderade AND n1.id <> n2.id
, tog den bort varje rad i tabellen.
-
Om du vill behålla raden med det lägsta
id
värde:DELETE n1 FROM names n1, names n2 WHERE n1.id > n2.id AND n1.name = n2.name
-
Om du vill behålla raden med det högsta
id
värde:DELETE n1 FROM names n1, names n2 WHERE n1.id < n2.id AND n1.name = n2.name
Jag använde den här metoden i MySQL 5.1
Inte säker på andra versioner.
Uppdatering:Eftersom personer som googlar för att ta bort dubbletter hamnar här
Även om OP:s fråga handlar om DELETE
, tänk på att använda INSERT
och DISTINCT
är mycket snabbare. För en databas med 8 miljoner rader tog frågan nedan 13 minuter när du använde DELETE
, det tog mer än 2 timmar men slutfördes ändå inte.
INSERT INTO tempTableName(cellId,attributeId,entityRowId,value)
SELECT DISTINCT cellId,attributeId,entityRowId,value
FROM tableName;