Advertencia del editor:esta solución es computacionalmente ineficiente y puede interrumpir su conexión para una tabla grande.
NB - Usted necesita para hacer esto primero en una copia de prueba de tu mesa!
Cuando lo hice, descubrí que a menos que también incluyera AND n1.id <> n2.id
, eliminó todas las filas de la tabla.
-
Si desea conservar la fila con el
id
más bajo valor:DELETE n1 FROM names n1, names n2 WHERE n1.id > n2.id AND n1.name = n2.name
-
Si desea mantener la fila con el
id
más alto valor:DELETE n1 FROM names n1, names n2 WHERE n1.id < n2.id AND n1.name = n2.name
Usé este método en MySQL 5.1
No estoy seguro acerca de otras versiones.
Actualización:Dado que las personas que buscan en Google para eliminar duplicados terminan aquí
Aunque la pregunta del OP es sobre DELETE
, tenga en cuenta que al usar INSERT
y DISTINCT
es mucho más rápido. Para una base de datos con 8 millones de filas, la siguiente consulta tardó 13 minutos mientras usaba DELETE
, tardó más de 2 horas y, sin embargo, no se completó.
INSERT INTO tempTableName(cellId,attributeId,entityRowId,value)
SELECT DISTINCT cellId,attributeId,entityRowId,value
FROM tableName;