2017-10-04 40 views
1

使用SQL Server 2016,我似乎无法弄清楚这一点。我有两个表,表A和表B:SQL Server加入所有没有Dups的记录

TableA 
Item| Value | ValueID 
-------------------------- 
1 | AAA  | 1 
1 | BBB  | 2 


TableB 
Item| Value | ValueID 
-------------------------- 
1 | XXX  | 1 
1 | YYY  | 2 
1 | ZZZ  | 3 


What I want to output is: 

Item | ValueA | ValueIDA | ValueB | ValueIDB 
-------------------------------------------------- 
1 | AAA  | 1  | XXX | 1 
1 | BBB  | 2  | YYY | 2 
1 | [NULL] | [NULL] | ZZZ | 3 

我已经试过JOIN我能想到的每一种组合,但我无法得到这样的结果。

在此先感谢 -MH

+0

你可以做表A右连接表B上VALUEID – Rams

+0

我想你想完全外部联接与价值ID的别名。 –

回答

3

只需使用一个left joinfull outer join。在这种情况下:

select b.item, a.value as valuea, a.valueid as valueida, 
     b.value as valueb, b.valueid as valueidb 
from b left join 
    a 
    on b.item = a.item and b.valueid = a.valueid; 

如果你可以有你希望在不匹配,甚至保持ba行,然后使用full join。在这种情况下,您需要在select中使用coalesce(a.item, b.item) as item

+0

好的 - 我看到我的问题这实际上是我尝试的查询(和FULL OUTER JOIN一起)。我的问题是我也在项目列(我没有包括在我的问题中)预测。我只是断言在表中的一个: WHERE a.Item = 1 它应该是一个a.Item = 1或b.Item = 1 感谢您回应 – user8723089

0

使用RIGHT JOIN

SELECT TableB.ItemID , 
     TableA.Value AS ValueA , 
     TableA.ValueID AS ValueIDA , 
     TableB.Value AS ValueB , 
     TableB.ValueID AS ValueIDB 
FROM TABLEA 
     RIGHT JOIN TableB ON TableA.ValueID = TableB.ValueID;