Выберите только те записи, которые имеют разные / несколько значений для определенного столбца

11

Ниже приведен пример моей таблицы участников. Там несколько записей, имеющих несколько значений в поле электронной почты. Я хочу выбрать только те записи, которые имеют несколько значений электронной почты:

Таблица участников

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

Я хотел бы, чтобы результат был:

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

Обратите внимание, что Тед Блэк отсутствует, потому что у него есть только одна запись для адреса электронной почты.

Я должен уточнить, что моя таблица членства имеет более 4 столбцов. Существуют дополнительные столбцы для телефона и адреса и т. Д. Для участника может быть несколько записей, так как он / она имеет более одного номера телефона или адреса. Я только хочу захватить тех людей, у которых есть несколько адресов электронной почты.

Это часть очистки базы данных, и будет добавлен первичный ключ. Я должен уточнить, что некоторые люди могут иметь несколько записей с одним и тем же адресом электронной почты. На этом этапе я не хочу записывать несколько записей с одним и тем же адресом электронной почты, но только те, у кого есть несколько записей с разными адресами электронной почты.

AlGator
источник

Ответы:

8

Вы могли бы сделать что-то вроде:

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    
Леннарт
источник
3
select x.* 
from member as x
where x.id IN

    (
    select id
    from member
    group by id
    having count(distinct email) > 1
    )
Victor111
источник