Wählen Sie nur die Datensätze aus, die unterschiedliche / mehrere Werte für eine bestimmte Spalte haben

11

Unten finden Sie ein Beispiel für meine Mitgliedschaftstabelle. Es gibt einige Datensätze mit mehreren Werten im E-Mail-Feld. Ich möchte nur die Datensätze auswählen, die mehrere E-Mail-Werte haben:

Mitgliedertabelle

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

Ich möchte, dass das Ergebnis lautet:

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

Beachten Sie, dass Ted Black fehlt, da er nur einen Eintrag für die E-Mail-Adresse hat.

Ich sollte klarstellen, dass meine Mitgliedschaftstabelle mehr als 4 Spalten enthält. Es gibt zusätzliche Spalten für Telefon und Adresse usw. Und es kann mehrere Einträge für ein Mitglied geben, da es mehr als eine Telefonnummer oder Adresse hat. Ich möchte nur Personen erfassen, die mehrere E-Mail-Adressen haben.

Dies ist Teil einer Datenbankbereinigung und ein Primärschlüssel wird hinzugefügt. Ich sollte weiter klarstellen, dass einige Personen mehrere Einträge mit derselben E-Mail-Adresse haben könnten. In dieser Phase möchte ich nicht diese mehreren Einträge mit derselben E-Mail-Adresse erfassen, sondern nur diejenigen, die mehrere Einträge mit unterschiedlicher E-Mail-Adresse haben.

AlGator
quelle

Antworten:

8

Sie könnten so etwas tun wie:

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
quelle
3
select x.* 
from member as x
where x.id IN

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