Preciso executar uma instrução select que retorne todas as linhas em que o valor de uma coluna não é distinto (por exemplo, EmailAddress).
Por exemplo, se a tabela se parecer abaixo:
CustomerName EmailAddress
Aaron aaron@gmail.com
Christy aaron@gmail.com
Jason jason@gmail.com
Eric eric@gmail.com
John aaron@gmail.com
Eu preciso da consulta para retornar:
Aaron aaron@gmail.com
Christy aaron@gmail.com
John aaron@gmail.com
Eu li muitos posts e tentei consultas diferentes sem sucesso. A consulta que acredito que deve funcionar está abaixo. Alguém pode sugerir uma alternativa ou me dizer o que pode estar errado com minha consulta?
select EmailAddress, CustomerName from Customers
group by EmailAddress, CustomerName
having COUNT(distinct(EmailAddress)) > 1
sql
sql-server
sql-server-2008
gafanhoto
fonte
fonte
HAVING
aqui em vez de um segundoSELECT...WHERE
faz com que seja uma consulta única, em vez da segunda opção que executa essa segundaSELECT...WHERE
chamada várias vezes. Veja mais aqui: stackoverflow.com/q/9253244/550975[EmailAddress] must appear in the GROUP BY clause or be used in an aggregate function
erro infame . A única correção - editar osql_mode
?[EmailAddress]
ESTÁ naGROUP BY
cláusulaO que está incorreto com sua consulta é que você está agrupando por email e nome, que forma um grupo de cada conjunto exclusivo de email e nome combinados e, portanto,
são tratados como três grupos diferentes, todos pertencendo a um único grupo.
Por favor, use a consulta como abaixo:
fonte
E se
fonte
fonte
Apenas por diversão, aqui está outra maneira:
fonte
Em vez de usar subconsultas em condições em que aumentará o tempo de consulta em que os registros são enormes.
Sugiro usar o Inner Join como uma opção melhor para esse problema.
Considerando a mesma tabela, isso poderia dar o resultado
Para obter resultados ainda melhores, sugiro que você use
CustomerID
ou qualquer campo exclusivo da sua tabela. A duplicação deCustomerName
é possível.fonte
Bem, há uma pequena alteração para encontrar as linhas não distintas ..
fonte