Mysql es una base de datos relacional, por lo que en general usamos relaciones (Dah !) que tienen que ser únicas a través de llaves primarias y foráneas. A veces nos pasan información que incluir en una tabla de manera directa que no necesariamente viene bien filtrada.
Cómo uno de nuestros fuertes en la empresa son los regalos corporativos, y dentro de ellos están los regalos de fin de año, muchas veces dependemos que las empresas con las cuales trabajamos nos manden la lista de empleados. En general esta información es entregada en un Excel o un CSV que puede tener datos repetidos que debemos filtrar.
Antiguamente para este objeto de encontrar filas repetidas realizaba un join de la tabla consigo misma, pero descubrí un método mucho más sencillo y menos tedioso.
SELECT * FROM `Empleados` group by `RUT` having count(*) >= 2
De esta manera también podemos eliminar de la lista automáticamente los que estén repetidos.
Como no podemos actualizar una tabla en base a la misma, creamos una tabla temporal con estos datos.
CREATE TABLE temporal AS SELECT `RUT` FROM `Empleados` group by `RUT` having count(*) >= 2
Ahora simplemente eliminamos los datos repetidos que aparecen en nuestra nueva tabla.
DELETE FROM `Empleados` WHERE `RUT` in ( SELECT `RUT` from temporal ) limit 1
Si bien el código anterior simplemente borra un solo registro, se entiende la idea. Ojo, si ejecutas nuevamente la sentencia existe la posibilidad que borres nuevamente el mismo registro que ya no estará repetido.