SQL Server加入所有没有重复的记录

时间:2017-10-04 22:39:43

标签: sql sql-server

使用SQL Server 2016,我似乎无法解决这个问题。我有两个表,TableA和TableB:

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

2 个答案:

答案 0 :(得分: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;

如果您a中的行可以保留,即使b中没有匹配项也要保留,请使用full join。在这种情况下,您需要在coalesce(a.item, b.item) as item中使用select

答案 1 :(得分: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;