233 votes

Comment sélectionner chaque ligne où la valeur de la colonne n'est pas distincte ?

Je dois exécuter une instruction de sélection qui renvoie toutes les lignes où la valeur d'une colonne n'est pas distincte (par exemple EmailAddress).

Par exemple, si le tableau se présente comme suit :

CustomerName     EmailAddress
Aaron            aaron@gmail.com
Christy          aaron@gmail.com
Jason            jason@gmail.com
Eric             eric@gmail.com
John             aaron@gmail.com

J'ai besoin que la requête renvoie :

Aaron            aaron@gmail.com
Christy          aaron@gmail.com
John             aaron@gmail.com

J'ai lu de nombreux articles et essayé différentes requêtes, sans succès. La requête qui, selon moi, devrait fonctionner est la suivante. Quelqu'un peut-il suggérer une alternative ou me dire ce qui ne va pas dans ma requête ?

select EmailAddress, CustomerName from Customers
group by EmailAddress, CustomerName
having COUNT(distinct(EmailAddress)) > 1

4voto

Naveen Kishan Points 41

Plutôt que d'utiliser des sous-requêtes dans la condition where, ce qui augmente le temps de recherche lorsque les enregistrements sont volumineux.

Je suggère d'utiliser la jointure interne comme meilleure solution à ce problème.

En considérant le même tableau, cela pourrait donner le résultat suivant

SELECT EmailAddress, CustomerName FROM Customers as a 
Inner Join Customers as b on a.CustomerName <> b.CustomerName and a.EmailAddress = b.EmailAddress

Pour des résultats encore meilleurs, je vous suggère d'utiliser CustomerID ou tout autre champ unique de votre table. La duplication de CustomerName est possible.

0voto

SELECT        Title, Id
FROM            dbo.TblNews
WHERE        (Title IN
      (SELECT  Title 
FROM dbo.TblNews AS TblNews_1
GROUP BY Title
HAVING (COUNT(*) > 1)))
ORDER BY Title
  • trier dans le titre

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X