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)