SQL

How to remove duplicate rows in SQL Server, MySql and Oracle?

Estrada Web Group
Administrador
How to remove duplicate rows in SQL Server, MySql and Oracle?

eliminar filas de sql server

In this article we will see how to eliminate duplicate rows in SQL Server, in MySQL and Oracle.

How to delete duplicate rows in 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

If you have a GUID instead of an integer as an ID, use the following.

CONVERT(uniqueidentifier, MIN(CONVERT(char(36), my_guid_column)))

How to delete duplicate rows in MySQL?

Continuing with the previous example, the primary key: id, the unique columns:  col_1, col_2, col_3. You can use a temporary table, like:

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

Or you can add a UNIQUE index to the table. When you execute this, all duplicate rows will be deleted. As an additional benefit, INSERT futures that are duplicates will fail. And you'd better make a backup before executing this statement.

ALTER IGNORE TABLE your_table ADD UNIQUE INDEX idx_name (col_1, col_2, col_3);

How to delete duplicate rows in Oracle?

The following example deletes all duplicate rows and leaves only one of them in 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

¿Para qué sirve la función ASCII de SQL Server y cómo utilizarla?

¿Para qué sirve la función ASCII de SQL Server y cómo utilizarla?

En este tutorial, aprenderá a usar la función ASCII() de SQL Server para obtener el código ASCII de un carácter.

Ver artículo completo
Cómo usar los valores NULL y los operadores IS NULL y IS NOT NULL para probar si un valor es NULL

Cómo usar los valores NULL y los operadores IS NULL y IS NOT NULL para probar si un valor es NULL

Resumen: en este tutorial, aprenderás sobre la lógica de los valores NULL en SQL Server. También aprenderás a usar los operadores IS NULL y IS NOT NULL para probar si un valor es NULL o no.

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