我想将具有相同主键值的具有不同数据的两个相同表联接在一起。
我正在两个表之间执行完全连接,因为我想查看两个月之间相同ID的信息已更改。我也尝试使用group by子句,但这没用。
Select
a.ID, a.Value1,
b.Value
from
TableA a
full join
TableB b on a.ID = b.ID
输入数据:
Table A Table B
ID Value ID Value
--------- ----------
1 A 1 A
1 B 1 B
2 A 1 C
所需的输出:
ID VALUE1 Value2
-----------------
1 A A
1 B B
1 Null C
当前(错误)输出:
ID VALUE1 Value2
-----------------
1 A A
1 A B
1 A C
1 B A
1 B B
1 B C
答案 0 :(得分:1)
我怀疑需要所有组合,因此FULL Join更好。
Select Case When a.ID IS Null Then b.ID Else a.ID End as ID,
a.Value,
b.Value
from UnequalRowsTableA a
full join UnequalRowsTableB b on a.ID=b.ID and a.Value = b.Value
结果
ID Value Value
1 A A
1 B B
2 A NULL
1 NULL C
答案 1 :(得分:0)
您可以在TableB
中使用FROM
,然后在TableA
中使用LEFT JOIN
,并在您的ON
子句中添加Value
匹配,以实现您的预期结果:
SELECT B.ID,
A.Value AS Value1,
B.Value AS Value2
FROM TableB B
LEFT JOIN TableA A ON A.ID = B.ID AND A.Value = B.Value;
包含示例数据的演示
DECLARE @TableA TABLE (ID INT, [Value] VARCHAR (1));
INSERT INTO @TableA (ID, [Value]) VALUES
(1, 'A'), (1, 'B'), (2, 'A');
DECLARE @TableB TABLE (ID INT, [Value] VARCHAR (1));
INSERT INTO @TableB (ID, [Value]) VALUES
(1, 'A'), (1, 'B'), (1, 'C');
SELECT B.ID,
A.[Value] AS Value1,
B.[Value] AS Value2
FROM @TableB B
LEFT JOIN @TableA A ON A.ID = B.ID AND A.[Value] = B.[Value];
输出:
ID Value1 Value2
----------------------
1 A A
1 B B
1 NULL C