2017-10-04 41 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;