.png)
En este articulo veremos cómo eliminar filas duplicadas en SQL Server, en MySQL y Oracle.
Cómo eliminar filas duplicadas en SQL Server
Suponiendo que no tienes valores nulos, agrupa las columnas exclusivas (por ejemplo, col_1, col_2, col_3) y seleccionas la columna identificadora (el ID) el MIN o MAX (por ejemplo, row_id) como la fila que se debe conservar. Luego, elimine todo lo que no tenía un ID:
DELETE my_table FROM my_table LEFT OUTER JOIN ( SELECT MIN(row_id) as row_id, col_1, col_2, col_3 FROM my_table GROUP BY col_1, col_2, col_3 ) as keep_rows ON my_table.row_id = keep_rows.row_id WHERE keep_rows.row_id IS NULL
Si tiene un GUID en lugar de un entero como ID, utiliza lo siguiente.
CONVERT(uniqueidentifier, MIN(CONVERT(char(36), my_guid_column)))
Cómo eliminar filas duplicadas en MySQL
Continuando con el ejemplo anterior, imaginemos que tienes las columnas col_1, col_2 y col_3, para eliminar las filas repetidas utilizamos una tabla temporal.
create temporary table temp_table (id int); insert temp_table (id) select id from your_table t1 where exists ( select * from your_table t2 where t2.col_1 = t1.col_1 and t2.col_2 = t1.col_2 and t2.col_3 = t1.col_3 and t2.id > t1.id ); delete from your_table where id in (select id from temp_table);
O puedes agregar un índice ÚNICO a la tabla. Cuando ejecutes esto, se eliminarán todas las filas duplicadas. Como beneficio adicional, los futuros INSERT que son duplicados fallarán. Y será mejor que haga una copia de seguridad antes de ejecutar esta declaración.
ALTER IGNORE TABLE your_table ADD UNIQUE INDEX idx_name (col_1, col_2, col_3);
Cómo eliminar filas duplicadas en Oracle
El siguiente ejemplo elimina todas las filas duplicadas y dejar solo una de ellas en Oracle
DELETE FROM my_table WHERE rowid not in (SELECT MIN(rowid) FROM my_table GROUP BY column1, column2, column3...) ;