sql >> Base de Datos >  >> RDS >> Mysql

¿Eliminar todas las filas duplicadas excepto una en MySQL?

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.

  1. 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
    
  2. 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;