【问题标题】:Is there any way to make FULL OUTER JOIN table match with the correct record?有什么方法可以使 FULL OUTER JOIN 表与正确的记录匹配?
【发布时间】:2019-04-08 06:25:32
【问题描述】:

我正在尝试使用 FULL OUTER JOIN 连接两个表,这两个表具有不同的数据行,并且这两个表之间的列是相同的。

表 2 全外连接表 1

表 1

id     姓名         付款金额
=== ======== ======================
1    杰克          10000
2    五月            20000
3   艾米           30000

表2

id    名称         付款金额               AccountID
=== ======== =================================
1   杰克          10000                                000001
2   艾米           30000                              000002

执行后显示的输出

id     T1name T2name     付款金额               AccountID
=== ======== ======================================== =
1    杰克          杰克          10000                                000001
2    五月           艾米          20000                                000002
3   艾米                          30000

我期望的输出

id     T1name T2name     付款金额               AccountID
=== ======== ======================================== =
1    杰克          杰克          10000                                000001
2    五月                           20000
3   艾米          艾米          30000                                000002

表格是按付款金额排序的。

【问题讨论】:

  • “在我执行查询之后” - 您没有以任何方式向我们展示过的查询?我们无法调试(通常)看不到的代码
  • @Damien_The_Unbeliever,我只是想知道我能解决这个问题的任何想法,稍后我将编辑我的语法
  • x2 和 x3 互换???
  • 不先生@saravanatn,id 列是自动递增的。
  • 你显示的结果不正确

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


【解决方案1】:
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

【讨论】:

  • 对不起@Chanukya 我编辑了我的案例。我发现我之前问的问题是错误的。
【解决方案2】:

您应该始终 JOIN 使用主键(特别是键)或始终使用唯一键。否则你会得到重复的值。名称列可能不是唯一的,您将获得笛卡尔积。在您的情况下,为了获得您想要的结果,您应该join on t1.name=t2.name

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-14
    • 2017-11-17
    • 1970-01-01
    • 2011-08-14
    • 2011-09-28
    • 1970-01-01
    • 2013-03-10
    • 1970-01-01
    相关资源
    最近更新 更多