Cómo encontrar y eliminar duplicados en SQL

Cómo encontrar y eliminar duplicados en SQL

Las mejores prácticas de diseño de bases de datos recomiendan usar la restricción ÚNICA para evitar duplicados en una base de datos. Sin embargo, cuando trabaje con una base de datos mal diseñada o con datos sucios, es posible que deba encontrar duplicados usted mismo y eliminarlos manualmente.

Siga leyendo para saber cómo encontrar duplicados en una base de datos SQL y cómo eliminarlos.

Crear una base de datos de muestra

Para fines de demostración, cree una tabla denominada Usuarios con una columna de nombre y puntuación ejecutando esta consulta SQL.

DROP TABLE IF EXISTS Users;

CREATE TABLE Users (
    pk_id int PRIMARY KEY,
    name VARCHAR (16),
    score INT,
);

Inserte algunos valores de muestra ejecutando esta consulta:

INSERT INTO
    Users(pk_id, name, score)
VALUES
    (1, 'Jane', 20),
    (2, 'John', 13),
    (3, 'Alex', 32),
    (4, 'John', 46),
    (5, 'Jane', 20),
    (6, 'Mary', 34),
    (7, 'Jane', 20),
    (8, 'John', 13)

Tenga en cuenta que algunas de estas filas contienen valores duplicados para la columna de nombre.

No dude en consultar estos comandos y consultas SQL si necesita una explicación más detallada de cómo manipular bases de datos mediante SQL.

Usando GROUP BY para encontrar valores duplicados

Puede usar la declaración GROUP BY para organizar valores que cumplan ciertas condiciones en el mismo grupo.

Digamos que los nombres en la tabla de muestra tienen que ser únicos. Puede usar GROUP BY para agrupar las filas que comparten el mismo nombre.

SELECT name, COUNT(name)
FROM Users
GROUP BY name
HAVING COUNT(name) > 1

COUNT le permite seleccionar las filas que tienen más de un usuario con el mismo nombre.

Cuando ejecute esta consulta, la base de datos devolverá las filas que contienen a John y Jane como duplicados.

Eliminación de duplicados de una base de datos

Después de encontrar los duplicados, es posible que desee eliminarlos mediante la instrucción DELETE.

Para este ejemplo, ejecute la siguiente consulta:

WITH cte AS (
    SELECT *
        ROW_NUMBER() OVER (
            PARTITION BY
                name, score
            ORDER BY
                name, score
        ) R
     FROM
        Users
)

DELETE FROM cte
WHERE R > 1;

Esta consulta usa una expresión CTE para encontrar los duplicados y luego los elimina todos excepto uno.

Por qué debería eliminar los datos duplicados

Eliminar datos duplicados no es obligatorio. Sin embargo, le permite liberar el espacio que usan las filas duplicadas.

Menos filas también significa que las consultas pueden ejecutarse mucho más rápido, lo que lleva a un mayor rendimiento. Utilice las consultas de este tutorial para encontrar y eliminar duplicados de una base de datos SQL.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *