有什么方法可以使FULL OUTER JOIN表与正确的记录匹配?

时间:2019-04-08 06:25:33

标签: sql sql-server jointable full-outer-join

我正在尝试使用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

该表是按付款金额排序的订单。

2 个答案:

答案 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