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
idmá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
idmá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;