Database
 sql >> Base de données >  >> RDS >> Database

Comment trouver des lignes en double dans SQL ?

Problème :

Vous avez des lignes en double dans votre table, seuls les ID étant uniques. Comment trouvez-vous ces entrées en double ?

Exemple :

Notre base de données a une table nommée product avec des données dans les colonnes suivantes :id , name , et category .

identifiant nom catégorie
1 steak viande
2 gâteau bonbons
3 d>steak viande
4 porc viande
5 gâteau bonbons
6 gâteau bonbons

Trouvons les noms et les catégories de produits en double. Vous pouvez trouver des doublons en regroupant des lignes, en utilisant le COUNT fonction d'agrégation et en spécifiant un HAVING clause avec laquelle filtrer les lignes.

Solution :

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

Cette requête renvoie uniquement les enregistrements en double, ceux qui ont le même nom de produit et la même catégorie :

nom catégorie
steak viande
gâteau bonbons

Il y a deux produits en double dans notre tableau :le steak de la catégorie viande et le gâteau de la catégorie sucreries. Le premier produit est répété deux fois dans le tableau, tandis que le second apparaît trois fois.

Discussion :

Pour sélectionner des valeurs en double, vous devez créer des groupes de lignes avec les mêmes valeurs, puis sélectionner les groupes dont le nombre est supérieur à un. Vous pouvez y parvenir en utilisant GROUP BY et un HAVING clause.

La première étape consiste à créer des groupes d'enregistrements avec les mêmes valeurs dans toutes les colonnes non ID (dans notre exemple, name et category ). Vous faites cela avec un GROUP BY clause. Après le GROUP BY mot-clé, vous mettez les noms des colonnes que vous souhaitez utiliser pour le regroupement. Nous excluons le id colonne parce que c'est la clé primaire de notre table; par définition, chaque ligne aura une valeur différente sous cette colonne. Si nous devions l'inclure, nous ne serions pas en mesure de détecter les doublons !

Nous voulons trouver des groupes avec plus d'une ligne ; ces groupes doivent contenir un doublon par définition, tant que nous avons regroupé sur les bonnes colonnes. Pour ce faire, nous utilisons un HAVING clause. La condition que nous spécifions est que le nombre d'éléments dans le groupe—COUNT(id) —doit être supérieur à un :COUNT(id) > 1 . Rappelez-vous que HAVING vous permet de filtrer les groupes ; WHERE sert à filtrer des lignes individuelles.