J'ai besoin d'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 ressemble à ci-dessous:
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 de la requête pour retourner:
Aaron aaron@gmail.com
Christy aaron@gmail.com
John aaron@gmail.com
J'ai lu de nombreux articles et essayé différentes requêtes en vain. La requête qui, selon moi, devrait fonctionner est ci-dessous. Quelqu'un peut-il suggérer une alternative ou me dire ce qui ne va pas avec ma requête?
select EmailAddress, CustomerName from Customers
group by EmailAddress, CustomerName
having COUNT(distinct(EmailAddress)) > 1
sql
sql-server
sql-server-2008
Sauterelle
la source
la source
HAVING
ici au lieu d'une secondeSELECT...WHERE
fait qu'il s'agit d'une seule requête, au lieu de la seconde option qui exécute ce secondSELECT...WHERE
appel plusieurs fois. Voir plus ici: stackoverflow.com/q/9253244/550975[EmailAddress] must appear in the GROUP BY clause or be used in an aggregate function
erreur. Est le seul correctif - modifier lesql_mode
?[EmailAddress]
EST dans laGROUP BY
clauseCe qui est incorrect avec votre requête, c'est que vous groupez par e-mail et par nom, qui forme un groupe de chaque ensemble unique d'e-mail et de nom combinés ensemble et donc
sont traités comme 3 groupes différents plutôt que tous appartenant à un seul groupe.
Veuillez utiliser la requête ci-dessous:
la source
Que diriez-vous
la source
la source
Juste pour le plaisir, voici une autre façon:
la source
Plutôt que d'utiliser des sous-requêtes dans la condition where qui augmentera le temps de requête lorsque les enregistrements sont énormes.
Je suggérerais d'utiliser Inner Join comme une meilleure option à ce problème.
Considérant le même tableau cela pourrait donner le résultat
Pour des résultats encore meilleurs, je vous suggère d'utiliser
CustomerID
ou n'importe quel champ unique de votre table. La duplication deCustomerName
est possible.la source
Eh bien, il y a un léger changement pour trouver les lignes non distinctes.
la source