Seleccione solo aquellos registros que tienen valores diferentes / múltiples para una columna en particular

11

A continuación se muestra un ejemplo de mi tabla de membresía. Hay algunos registros que tienen múltiples valores en el campo de correo electrónico. Solo quiero seleccionar aquellos registros que tienen múltiples valores de correo electrónico:

Tabla de miembros

ID   LASTNAME    FIRSTNAME    EMAIL
567  Jones       Carol        carolj@gmail.com
567  Jones       Carol        caroljones@aol.com
678  Black       Ted          tedblack@gmail.com
908  Roberts     Cole         coleroberts@gmail.com
908  Roberts     Cole         coler@aol.com
908  Roberts     Cole         colerobersc@hotmail.com

Me gustaría que el resultado sea:

567  Jones       Carol        carolj@gmail.com
567  Jones       Carol        caroljones@aol.com
908  Roberts     Cole         coleroberts@gmail.com
908  Roberts     Cole         coler@aol.com
908  Roberts     Cole         colerobersc@hotmail.com

Observe que falta Ted Black porque solo tiene una entrada para la dirección de correo electrónico.

Debo aclarar que mi tabla de membresía tiene más de 4 columnas. Hay columnas adicionales para el teléfono y la dirección, etc. Y podría haber múltiples entradas para un miembro porque tiene más de un número de teléfono o dirección. Solo quiero capturar a esas personas que tienen múltiples direcciones de correo electrónico.

Esto es parte de una limpieza de la base de datos y se agregará una clave principal. Debo aclarar aún más que algunas personas podrían tener múltiples entradas con la misma dirección de correo electrónico. En esta fase no quiero capturar esas entradas múltiples con la misma dirección de correo electrónico, pero solo aquellos que tienen múltiples entradas con una dirección de correo electrónico diferente.

AlGator
fuente

Respuestas:

8

Podrías hacer algo como:

select distinct x.id, x.lastname, x.firstname, x.email
from t as x
join (
    select id
    from t
    group by id
    having count(distinct email) > 1
) as y
    on x.id = y.Id    
Lennart
fuente
3
select x.* 
from member as x
where x.id IN

    (
    select id
    from member
    group by id
    having count(distinct email) > 1
    )
Victor111
fuente