2011-03-16 5 views
1

Je ne sais pas exactement comment l'obtenir.imbriqué select (SQL Server)

Ce que j'ai est quelque chose comme ça.

TableA: VisitID, PersonID1, PersonID2 
TableB: PersonID, FirstName, LastName 

Je voudrais retourner Visit ID, le nom de PersonID1, le nom de personID2.

En général, je voudrais juste faire un simple rejoindre, mais je ne peux pas sembler obtenir que pour travailler

Il devrait aller quelque chose comme

SELECT A.VisitID, B.FirstName+B.LastName, B.FirstName+B.LastName (this is dup, wont work) 
FROM TableA A 
JOIN TableB B ON TableA.PersonID1=TableB.PersonID OR TableA.PersonID2=TableB.PersonID 

Merci!

Répondre

3

Vous devez joindre tableb deux fois, une fois pour chaque ID:

select VisitID, b1.FirstName, b1.LastName, b2.FirstName, b2.LastName 
from TableA 
     inner join TableB b1 on TableA.PersonID1=b1.PersonID 
     inner join TableB b2 on TableA.PersonID2=b2.PersonID 
+0

Cela fonctionne très bien (comme les autres réponses), Merci beaucoup! – Rob

4
select A.VisitID, B1.FirstName+B1.LastName, B2.FirstName+B2.LastName 
from TableA A 
    join TableB B1 on A.PersonID1 = B1.PersonId 
    join TableB B2 on A.PersonID2 = B2.PersonId 

essentiellement, vous joindre à TableB deux fois, une fois par clé étrangère dans TableA

2

Je pense que jointure interne simple deux les temps devraient faire l'affaire.

select A.VisitID, (BB.FirstName + ' ' + BB.LastName) as Person1, 
(BC.FirstName + ' ' + BC.LastName) as Person2 
from TableA A 
inner join TableB BB on A.PersonID1 = BB.PersonId 
inner join TableB BC on A.PersonID2 = BC.PersonId 
1

Si PersonID1/PersonID2 sont annulable, la jointure doit être laissé rejoindre

Select 
     A.VisitID 
    , B1.FirstName + ' ' + B1.LastName 
    , B2.FirstName + ' ' + B2.LastName 
From 
    TableA A 
Left Join 
    TableB B1 
On 
    A.PersonID1 = B1.PersonID 
Left Join 
    TableB B2 
On 
    A.PersonID1 = B2.PersonID 
+0

Oui mais si 'personid1/2' est nullable, alors peut-être que cette approche n'est pas la meilleure. Un ID lié à une liste d'ID de personne serait préférable. – Blindy