如何组合列中略有不同的多个表

min*_*nda 5 sql union join

我有多个表,其中大约有 10 个公共列,但有些表有 1-2 个额外的列。

我想将所有这些表合并到一个表中,每个表中的每一行都有一行,每个特定行的源表中不存在的任何列都为 NULL 值。

所以我的输入大致是这样的:

table1
id  |  colA  | colB

table2
id  |  colA  | colB  | colC

table3
id  |  colA  | colB  | colD
Run Code Online (Sandbox Code Playgroud)

我试图得到这个:

allTables
id  |  colA  | colB  | colC | colD
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,table1 中的所有行在 allTables 中的 colC 和 colD 将具有 NULL 值,table2 中的所有行的 colD 将具有空值,而 table3 中的所有行在 colC 中将具有空值。

一些注意事项:

  • 表之间的列 id 不相同或不相关
  • 我的示例显示了 3 个表,但我有大约 8-9 个。
  • 每个源表中都存在重复的行,应予以保留。

我特别感兴趣的是,是否有类似于此处最高投票的答案或类似的更笼统的答案。

Tom*_*m H 4

SELECT
    id,
    colA,
    colB,
    NULL AS colC,
    NULL AS colD
FROM
    Table1
UNION ALL
SELECT
    id,
    colA,
    colB,
    colC,
    NULL AS colD
FROM
    Table2
UNION ALL
SELECT
    id,
    colA,
    colB,
    NULL AS colC,
    colD
FROM
    Table3
Run Code Online (Sandbox Code Playgroud)

由于 id 不相关,您可能还想跟踪该行来自哪个表,以防表之间存在重复项。为此,只需在三个SELECT语句中的每一个中使用一个硬编码值和一个具有不同值的别名即可。