Cómo eliminar filas duplicadas en SQL Server, MySql y Oracle
.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...) ;