SQL

Cómo eliminar filas duplicadas en SQL Server, MySql y Oracle

Estrada Web Group
Estrada Web Group
Cómo eliminar filas duplicadas en SQL Server, MySql y Oracle

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...) ;

 

Compartir artículo:

Más artículos geniales

¿Cómo remplazar una cadena de caracteres por otra en SQL Server?

¿Cómo remplazar una cadena de caracteres por otra en SQL Server?

En este tutorial, aprenderás a usar la función REPLACE() de SQL Server para reemplazar todas las veces que aparezca una palabra, frase o cadena de caracteres por otra palabra o frase dentro de una cadena de caracteres.

Ver artículo completo
¿Cómo insertar varios registros en un solo INSERT en SQL?

¿Cómo insertar varios registros en un solo INSERT en SQL?

En este tutorial, aprenderá cómo insertar varias filas en una tabla utilizando una sola instrucción INSERT de SQL Server.

Ver artículo completo
¿Cómo usar el operador ANY de SQL Server?

¿Cómo usar el operador ANY de SQL Server?

Resumen: en este tutorial, aprenderás a usar el operador ANY de SQL Server para comparar un valor con un conjunto de valores de una sola columna devuelto por una subconsulta.

Ver artículo completo

Manténgase actualizado

Obtenga excelente contenido en su bandeja de entrada todas las semanas.
Solo contenido excelente, no compartimos su correo electrónico con terceros.
Subir al inicio de la pantalla