valores traer seleccionar registros mostrar filas duplicados duplicadas datos consultar buscar mysql duplicate-removal delete-row

traer - select mysql registros duplicados



¿La forma más eficiente de eliminar todas las filas duplicadas de la tabla? (2)

Puede unirse a una tabla desde una subconsulta que solo devuelve foo único con LEFT JOIN . Las filas que no coinciden en la subconsulta se eliminarán como desee, por ejemplo

DELETE a FROM TableName a LEFT JOIN ( SELECT foo FROM TableName GROUP BY Foo HAVING COUNT(*) = 1 ) b ON a.Foo = b.Foo WHERE b.Foo IS NULL

Para un rendimiento más rápido, agregue un índice en la columna Foo .

ALTER TABLE tableName ADD INDEX(foo)

Tengo una mesa:

| foo | bar | +-----+-----+ | a | abc | | b | def | | c | ghi | | d | jkl | | a | mno | | e | pqr | | c | stu | | f | vwx |

Quiero eliminar todas las filas que contengan duplicados por la columna foo para que la tabla se vea así:

| foo | bar | +-----+-----+ | b | def | | d | jkl | | e | pqr | | f | vwx |

¿Cuál es la forma más eficiente de hacer esto?


Usando EXISTS :

DELETE a FROM TableName a WHERE EXISTS (SELECT NULL FROM TableName b WHERE b.foo = a.foo GROUP BY b.foo HAVING COUNT(*) > 1)

Usando IN :

DELETE a FROM TableName a WHERE a.foo IN (SELECT b.foo FROM TableName b GROUP BY b.foo HAVING COUNT(*) > 1)