我正在尝试使用FULL OUTER JOIN联接两个表,即两个表具有不同的数据行,并且这两个表之间的列相同。
表2外部联接表1
表1
id名称名称付款金额
=== ============================
1杰克10000
2月5月20000
3艾米(Amy)30000
表2
id名称支付金额账户ID
=== =====================================
1个Jack 10000 0000001
2艾米30000 30000000002
执行后显示的输出
id T1名称
T2name的付款金额AccountID
=== ============================================== =
1杰克杰克10000 0000001
5月2日,艾米(Amy)20000
3艾米(Amy)30000
我期望的输出
id T1名称
T2name的付款金额AccountID
=== ============================================== =
1杰克杰克10000 0000001
5月2日20000
3艾米(Amy)30000艾米(Amy)30000
该表是按付款金额排序的订单。
答案 0 :(得分:3)
CREATE TABLE #Table1
([id] varchar(2), [name] varchar(4), [Payment Amount] int)
INSERT INTO #Table1
([id], [name], [Payment Amount])
VALUES
('S1', 'Jack', 10000),
('S2', 'May', 20000),
('S3', 'Amy', 30000)
CREATE TABLE #Table2
([id] varchar(2), [name] varchar(4), [Payment Amount] int)
;
INSERT INTO #Table2
([id], [name], [Payment Amount])
VALUES
('X1', 'Jack', 10000),
('X2', 'Amy', 30000)
select A.id,A.name T1name ,isnull(B.name,'') T2name,A.[Payment Amount] from #Table1 A left join #Table2 B on A.name=B.name
and A.[Payment Amount]=B.[Payment Amount]
输出
id T1name T2name Payment Amount
S1 Jack Jack 10000
S2 May 20000
S3 Amy Amy 30000
答案 1 :(得分:0)
您应始终JOIN
始终使用主键(特别是键)或唯一键。否则,您将获得重复的值。 “名称”列可能不是唯一的,您将获得笛卡尔积。要获得所需的结果,您应join on t1.name=t2.name