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

¿Cómo encontrar filas duplicadas en SQL?

Problema:

Tiene filas duplicadas en su tabla, y solo las ID son únicas. ¿Cómo encuentras esas entradas duplicadas?

Ejemplo:

Nuestra base de datos tiene una tabla llamada product con datos en las siguientes columnas:id , name y category .

id nombre categoría
1 bistec carne
2 pastel dulces
3 d>bistec carne
4 cerdo carne
5 pastel dulces
6 pastel dulces

Encontremos nombres duplicados y categorías de productos. Puede encontrar duplicados agrupando filas, usando el COUNT función agregada y especificando un HAVING cláusula con la que filtrar filas.

Solución:

SELECT  name,
 category,
FROM product
GROUP BY name, category
HAVING COUNT(id) >1;

Esta consulta devuelve solo registros duplicados, aquellos que tienen el mismo nombre de producto y categoría:

nombre categoría
bistec carne
pastel dulces

Hay dos productos duplicados en nuestra mesa:bistec de la categoría de carnes y pastel de la categoría de dulces. El primer producto se repite dos veces en la tabla, mientras que el segundo aparece tres veces.

Discusión:

Para seleccionar valores duplicados, debe crear grupos de filas con los mismos valores y luego seleccionar los grupos con recuentos superiores a uno. Puede lograrlo usando GROUP BY y un HAVING cláusula.

El primer paso es crear grupos de registros con los mismos valores en todas las columnas sin ID (en nuestro ejemplo, name y category ). Haces esto con un GROUP BY cláusula. Después de GROUP BY palabra clave, pones los nombres de las columnas que quieres usar para agrupar. Excluimos el id columna porque es la clave principal de nuestra tabla; por definición, cada fila tendrá un valor diferente debajo de esa columna. Si lo incluyéramos, ¡entonces no podríamos detectar duplicados!

Queremos encontrar grupos con más de una fila; dichos grupos deben contener un duplicado por definición, siempre que los hayamos agrupado en las columnas correctas. Para hacer esto, usamos un HAVING cláusula. La condición que especificamos es que el número de elementos en el grupo—COUNT(id) —debe ser mayor que uno:COUNT(id) > 1 . Recuerda que HAVING le permite filtrar grupos; WHERE es para filtrar filas individuales.