我有多个表,其中大约有 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 中将具有空值。
一些注意事项:
我特别感兴趣的是,是否有类似于此处最高投票的答案或类似的更笼统的答案。
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语句中的每一个中使用一个硬编码值和一个具有不同值的别名即可。
| 归档时间: |
|
| 查看次数: |
1718 次 |
| 最近记录: |