2013-02-18 4 views
0

J'ai une requête qui vérifie une table pour un certain nombre de champs. Les deux tables qui m'intéressent sont: PERSONNE & PERSON_ALTERNATE_ID.Requête de jointure SQL - sélection à partir de deux tables

Je souhaite modifier ma requête pour renvoyer également la valeur stockée dans person_alternate_id (si la personne en particulier a en effet un)

select distinct person.person_id, person_name, person_address 
from person join person_alternate_id 
on 
person.person_id=person_alternate_id.person_id 
where person.person_id 
in (10001,10002,10003); 

Quelqu'un peut-il suggérer comment je pourrais le faire? Je regardais des exemples sélectionnés imbriqués, mais je n'étais pas en mesure de mettre en œuvre un changement approprié à ma requête qui a atteint ce dont j'avais besoin. À l'heure actuelle, la requête renvoie uniquement les champs dont j'ai besoin dans la table PERSON.

Répondre

2

Parce que la personne peut ou non avoir un identifiant autre, vous devez utiliser une jointure gauche:

select person.person_id, person_name, person_address, person_alternate_id.* 
from person 
left join person_alternate_id 
on person.person_id=person_alternate_id.person_id 
where person.person_id 
in (10001,10002,10003); 
+0

Merci, cela semble faire l'affaire. Cependant, il semble ignorer le distinct, et tirer plusieurs enregistrements maintenant, j'ai seulement besoin d'un exemple de 10001. Maintenant, je reçois de nombreuses instances ... Pouvez-vous conseiller? – GrumP

+0

Je ne comprends pas pourquoi et ce que vous avez dupliqué: Personnes ou Person_alternate_ids. Si distinct ne vous aide pas, faites le moi savoir: 10001 apparaissent plusieurs fois dans la table Person ou dans Person_alternate_id? –

+0

Je l'ai compris, merci. PERSON_ALT_ID sur la deuxième table, peut avoir plusieurs valeurs basées sur un autre champ ID_TYPE. C'est pourquoi distinct ne suffisait pas ... J'ai modifié la requête pour rechercher explicitement les ID d'un certain TYPE. Merci de votre aide. :) – GrumP