Necesito ejecutar una instrucción select que devuelva todas las filas donde el valor de una columna no es distinto (por ejemplo, EmailAddress).
Por ejemplo, si la tabla se ve a continuación:
CustomerName EmailAddress
Aaron aaron@gmail.com
Christy aaron@gmail.com
Jason jason@gmail.com
Eric eric@gmail.com
John aaron@gmail.com
Necesito que la consulta regrese:
Aaron aaron@gmail.com
Christy aaron@gmail.com
John aaron@gmail.com
He leído muchas publicaciones y he intentado diferentes consultas en vano. La consulta que creo que debería funcionar está a continuación. ¿Alguien puede sugerir una alternativa o decirme qué puede estar mal con mi consulta?
select EmailAddress, CustomerName from Customers
group by EmailAddress, CustomerName
having COUNT(distinct(EmailAddress)) > 1
sql
sql-server
sql-server-2008
Saltamontes
fuente
fuente
HAVING
aquí en lugar de un segundoSELECT...WHERE
hace que se trate de una sola consulta, en lugar de la segunda opción que ejecuta esa segundaSELECT...WHERE
llamada muchas veces. Ver más aquí: stackoverflow.com/q/9253244/550975[EmailAddress] must appear in the GROUP BY clause or be used in an aggregate function
error. ¿Es la única solución: editar elsql_mode
?[EmailAddress]
IS en laGROUP BY
cláusulaLo incorrecto con su consulta es que está agrupando por correo electrónico y nombre, que forma un grupo de cada conjunto único de correo electrónico y nombre combinados y, por lo tanto,
se tratan como 3 grupos diferentes en lugar de pertenecer a un solo grupo.
Utilice la consulta como se indica a continuación:
fuente
Qué tal si
fuente
fuente
Solo por diversión, aquí hay otra forma:
fuente
En lugar de usar subconsultas en la condición where, lo que aumentará el tiempo de consulta donde los registros son enormes.
Sugeriría usar Inner Join como una mejor opción para este problema.
Considerando la misma tabla esto podría dar el resultado
Para obtener resultados aún mejores, le sugiero que utilice
CustomerID
o cualquier campo único de su tabla. La duplicación deCustomerName
es posible.fuente
Bueno, hay un ligero cambio para encontrar las filas no distintas ...
fuente