Redigeringsadvarsel:Denne løsning er beregningsmæssigt ineffektiv og kan ødelægge din forbindelse til et stort bord.
NB - Du bruger at gøre dette først på en testkopi af dit bord!
Da jeg gjorde det, fandt jeg ud af, at medmindre jeg også inkluderede AND n1.id <> n2.id
, den slettede hver række i tabellen.
-
Hvis du vil beholde rækken med det laveste
id
værdi:DELETE n1 FROM names n1, names n2 WHERE n1.id > n2.id AND n1.name = n2.name
-
Hvis du vil beholde rækken med det højeste
id
værdi:DELETE n1 FROM names n1, names n2 WHERE n1.id < n2.id AND n1.name = n2.name
Jeg brugte denne metode i MySQL 5.1
Ikke sikker på andre versioner.
Opdatering:Da folk, der googler for at fjerne dubletter, ender her
Selvom OP's spørgsmål handler om DELETE
, vær opmærksom på, at du bruger INSERT
og DISTINCT
er meget hurtigere. For en database med 8 millioner rækker tog nedenstående forespørgsel 13 minutter, mens du brugte DELETE
, det tog mere end 2 timer og blev alligevel ikke fuldført.
INSERT INTO tempTableName(cellId,attributeId,entityRowId,value)
SELECT DISTINCT cellId,attributeId,entityRowId,value
FROM tableName;