sql >> Base de Datos >  >> RDS >> Database

Cómo encontrar valores duplicados en una tabla SQL

En general, es una buena práctica poner restricciones únicas en una tabla para evitar filas duplicadas. Sin embargo, es posible que trabaje con una base de datos en la que se hayan creado filas duplicadas debido a un error humano, un error en su aplicación o datos sin limpiar de fuentes externas. Este tutorial le enseñará cómo encontrar estas filas duplicadas.

Para seguir, necesitará acceso de lectura a su base de datos y una herramienta para consultar su base de datos.

Identificar criterios duplicados

El primer paso es definir sus criterios para una fila duplicada. ¿Necesita una combinación de dos columnas para que sean únicas juntas, o simplemente está buscando duplicados en una sola columna? En este ejemplo, buscamos duplicados en dos columnas de nuestra tabla Usuarios:nombre de usuario y correo electrónico.

Escribir consulta para verificar que existen duplicados

La primera consulta que vamos a escribir es una consulta simple para verificar si existen duplicados en la tabla. Para nuestro ejemplo, mi consulta se ve así:

SELECT username, email, COUNT(*)
FROM users
GROUP BY username, email
HAVING COUNT(*) > 1

HAVING es importante aquí porque a diferencia de WHERE , HAVING filtros en funciones agregadas.

Si se devuelve alguna fila, eso significa que tenemos duplicados. En este ejemplo, nuestros resultados se ven así:

nombre de usuario correo electrónico contar
Pedro [email protected] 2
Jessica [email protected] 2
Millas [email protected] 2

Lista de todas las filas que contienen duplicados

En el paso anterior, nuestra consulta devolvió una lista de duplicados. Ahora, queremos devolver el registro completo para cada fila duplicada.

Para lograr esto, necesitaremos seleccionar toda la tabla y unirla a nuestras filas duplicadas. Nuestra consulta se ve así:

SELECT a.*
FROM users a
JOIN (SELECT username, email, COUNT(*)
FROM users 
GROUP BY username, email
HAVING count(*) > 1 ) b
ON a.username = b.username
AND a.email = b.email
ORDER BY a.email

Si te fijas bien, verás que esta consulta no es tan complicada. El SELECT inicial simplemente selecciona cada columna en la tabla de usuarios, y luego la une internamente con la tabla de datos duplicados de nuestra consulta inicial. Debido a que estamos uniendo la tabla a sí misma, es necesario usar alias (aquí, estamos usando a y b) para etiquetar las dos versiones.

Así es como se ven nuestros resultados para esta consulta:

id nombre de usuario correo electrónico
1 Pedro [email protected]
6 Pedro [email protected]
12 Jessica [email protected]
13 Jessica [email protected]
2 Millas [email protected]
9 Millas [email protected]

Debido a que este conjunto de resultados incluye todos los ID de fila, podemos usarlo para ayudarnos a deduplicar las filas más adelante.