Wybierz tylko te rekordy, które mają różne / wiele wartości dla konkretnej kolumny

11

Poniżej znajduje się przykład mojej tabeli członkostwa. Istnieje kilka rekordów mających wiele wartości w polu e-mail. Chcę tylko wybrać te rekordy, które mają wiele wartości e-mail:

Tabela członków

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

Chciałbym, aby wynik był:

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

Zauważ, że Ted Black zaginął, ponieważ ma tylko jeden wpis na adres e-mail.

Powinienem wyjaśnić, że moja tabela członkostwa ma więcej niż 4 kolumny. Istnieją dodatkowe kolumny dotyczące numeru telefonu i adresu itp. Członek może mieć wiele wpisów, ponieważ ma więcej niż jeden numer telefonu lub adres. Chcę tylko uchwycić osoby, które mają wiele adresów e-mail.

Jest to część czyszczenia bazy danych i zostanie dodany klucz podstawowy. Powinienem wyjaśnić dalej, że niektóre osoby mogą mieć wiele wpisów z tym samym adresem e-mail. Na tym etapie nie chcę przechwytywać wielu wpisów z tym samym adresem e-mail, ale tylko tych, którzy mają wiele wpisów z innym adresem e-mail.

AlGator
źródło

Odpowiedzi:

8

Możesz zrobić coś takiego:

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
źródło
3
select x.* 
from member as x
where x.id IN

    (
    select id
    from member
    group by id
    having count(distinct email) > 1
    )
Victor111
źródło