2011-03-16 102 views
1

我不确定如何得到这个。嵌套选择(SQL Server)

我有什么是这样的。

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

我想返回访问ID,PersonID1的名称,personID2的名称。

通常我只想做一个简单的加入,但我似乎无法得到那个工作

它应该像

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 

谢谢!

回答

3

你必须加入tableb两次,一次为每个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

这个伟大的工程(如做其他的答案),非常感谢! – Rob 2011-03-16 17:14:16

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 

基本上,你TableB每个外键连接两次,一次在TableA

2

我想简单内连接两个时代应该做的伎俩。

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

如果PersonID1/PersonID2是空的,则加入亦留下加入

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

是的,但如果'personid1/2'可以为空,那么也许这种方法不是最好的。链接到人员ID列表的ID会更好。 – Blindy 2011-03-16 18:10:21