SQL Server不使用DUP联接所有记录
使用SQL Server 2016,我似乎无法理解这一点。我有两张桌子,表A和表B:SQL Server不使用DUP联接所有记录,sql,sql-server,Sql,Sql Server,使用SQL Server 2016,我似乎无法理解这一点。我有两张桌子,表A和表B: TableA Item| Value | ValueID -------------------------- 1 | AAA | 1 1 | BBB | 2 TableB Item| Value | ValueID -------------------------- 1 | XXX | 1 1 | YYY |
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
我已经尝试了我能想到的每一种加入组合,但我无法得到这个结果
提前谢谢
-MH只需使用
左连接
或完全外部连接
。在这种情况下:
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
中没有匹配项,也可以使用完全联接
。在这种情况下,您将希望在选择中使用合并(a.item,b.item)作为项
,使用右连接
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;
您可以在ValueId上执行TableA right join TableB我想您需要在ValueId上使用别名的完整外部联接。好的-我知道我的问题了,这实际上是我尝试的查询(以及完整外部联接)。我的问题是,我也在预测Item列(我的问题中没有包括它)。我只是在其中一个表上做了预测:其中a.Item=1应该是a.Item=1或b.Item=1谢谢你的回答