web-dev-qa-db-fra.com

Sélectionnez uniquement les enregistrements qui ont des valeurs différentes / multiples pour une colonne particulière

Voici un exemple de ma table d'adhésion. Il y a des enregistrements ayant plusieurs valeurs dans le champ e-mail. Je souhaite uniquement sélectionner les enregistrements qui ont plusieurs valeurs de messagerie:

Table des membres

ID   LASTNAME    FIRSTNAME    EMAIL
567  Jones       Carol        [email protected]
567  Jones       Carol        [email protected]
678  Black       Ted          [email protected]
908  Roberts     Cole         [email protected]
908  Roberts     Cole         [email protected]
908  Roberts     Cole         [email protected]

J'aimerais que le résultat soit:

567  Jones       Carol        [email protected]
567  Jones       Carol        [email protected]
908  Roberts     Cole         [email protected]
908  Roberts     Cole         [email protected]
908  Roberts     Cole         [email protected]

Notez que Ted Black est manquant car il n'a qu'une seule entrée pour l'adresse e-mail.

Je dois préciser que ma table d'adhésion comporte plus de 4 colonnes. Il y a des colonnes supplémentaires pour le téléphone et l'adresse, etc. Et il peut y avoir plusieurs entrées pour un membre car il/elle a plus d'un numéro de téléphone ou d'une adresse. Je souhaite uniquement capturer les personnes qui ont plusieurs adresses e-mail.

Cela fait partie d'un nettoyage de base de données et une clé primaire sera ajoutée. Je dois préciser que certaines personnes peuvent avoir plusieurs entrées avec la même adresse e-mail. À ce stade, je ne veux pas capturer ces entrées multiples avec la même adresse e-mail, mais seulement celles qui ont plusieurs entrées avec une adresse e-mail différente.

11
AlGator

Vous pourriez faire quelque chose comme:

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

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