我有多个表,其中大约有10个常用列,但有些表有1-2个额外的列。
我想将所有这些表组合成一个表,每个表的每一行都有一行,每个特定行的源表中不存在任何列的NULL值。
所以我的输入看起来大致如下:
table1
id | colA | colB
table2
id | colA | colB | colC
table3
id | colA | colB | colD
我正试图解决这个问题:
allTables
id | colA | colB | colC | colD
在上面的例子中,table1中的所有行在allTables中都有colC和colD的NULL值,table2中的所有行都有colD的空值,而table3中的所有行在colC中都有空值。
一对夫妇注意到:
特别是我感兴趣的是,有一个答案类似于最高投票的here或类似的更广泛的答案。
答案 0 :(得分: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
由于id不相关,因此您可能还希望跟踪行来自哪个表,以防表之间存在重复。要做到这一点,只需在三个SELECT
语句中使用带有别名的硬编码值。
答案 1 :(得分:3)
您可以使用UNION
:
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;
如评论中所述,如果您要从不同的表格中删除重复项,则可以使用UNION
/ UNION DISTINCT
对此进行更改。感谢评论者。
答案 2 :(得分:3)
你可以试试这个:
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
答案 3 :(得分:0)
您需要的是UNION
:
SELECT id, colA, colB, null as colC, null as colD
FROM table1
UNION
SELECT id, colA, colB, colC, null as ColD
FROM table2
UNION
SELECT id, colA, colB, null as colC, cold
FROM table3