【问题标题】:Full outer join like functionality but merging columns完全外连接类似功能但合并列
【发布时间】:2020-02-17 21:35:22
【问题描述】:

表A

id  | symbolA
 1       m
 2       n
 4       o

表B

id  | symbolB
 2       p
 3       q
 5       r

我想要以下结果:

id    |  symbolA     | symbolB
2          n              p
1          m              NULL
4          o              NULL
3          NULL           q
5          NULL           r

这是我已经尝试过的:

SELECT
  TableA.id,
  TableB.id,
  TableA.symbolA,
  TableB.symbolB
FROM
  TableA
FULL OUTER JOIN
  TableB
ON
  TableA.id = TableB.id


NewTable
TableA.id | TableA.symbolA | TableB.id | TableA.symbolB
    2             n             2               p
    1             m             NULL            NULL
    4             o             NULL            NULL
    NULL       NULL             3               q
    NULL       NULL             5               r

我已经尝试过结合合并的完整外连接,但它并没有完全给我上述所需的输出。该语言是 BigQuery,尽管我希望我的请求没有任何特殊之处,不会使其与 SQL 语言无关。谢谢。

【问题讨论】:

  • 请向我们展示您当前的尝试,它产生的输出,并向我们解释它为什么不完全是您想要的。
  • 请在代码问题中给出minimal reproducible example--剪切&粘贴&可运行代码;具有期望和实际输出(包括逐字错误消息)的示例输入(作为初始化代码);标签和版本;明确的规范和解释。对于包含最少代码的错误,您可以给出的代码是您显示的代码可以通过您显示的代码扩展为不正常。 (调试基础。)How to Ask 适用于包含版本和 DDL 的 SQL,其中包括约束、索引和表格初始化。隔离第一个意外/误解的子表达式及其输入和输出。 (调试基础。)问这个。

标签: sql join merge google-bigquery full-outer-join


【解决方案1】:

你快到了。您只需合并两个id 列。

为此,您可以使用coalesce()

select
    coalesce(a.id, b.id) id,
    a.symbola,
    b.symbolb
from tablea a
full outer join tableb b on a.id = b.id

以下与using 连接的语法也应该有效(大多数支持full join 的数据库都允许这样做):

select
    id,
    a.symbola,
    b.symbolb
from tablea a
full outer join tableb b using(id)

【讨论】:

    猜你喜欢
    • 2014-09-23
    • 2018-11-20
    • 2018-04-16
    • 2017-06-09
    • 2016-12-19
    • 2018-03-05
    • 1970-01-01
    • 2017-09-12
    • 1970-01-01
    相关资源
    最近更新 更多