Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何组合列中略有不同的多个表_Sql_Join_Union - Fatal编程技术网

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

Sql 如何组合列中略有不同的多个表,sql,join,union,Sql,Join,Union,我有多个表,其中大约有10个公共列,但有些表有1-2个额外的列 我想将所有这些表合并到一个表中,每个表中的每一行对应一行,每个特定行的源表中不存在的任何列对应空值 因此,我的输入大致如下: table1 id | colA | colB table2 id | colA | colB | colC table3 id | colA | colB | colD 我正努力做到这一点: allTables id | colA | colB | colC | colD

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

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

因此,我的输入大致如下:

table1
id  |  colA  | colB

table2
id  |  colA  | colB  | colC

table3
id  |  colA  | colB  | colD
我正努力做到这一点:

allTables
id  |  colA  | colB  | colC | colD
在上面的示例中,表1中的所有行在所有表中的colC和colD值都为空,表2中的所有行在colD值都为空,表3中的所有行在colC值都为空

几点注意:

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

我特别感兴趣的是,是否有一个答案类似于最受欢迎的答案,或者类似的答案更一般化。

您可以使用
联合体

          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;
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
如注释中所述,如果要丢弃不同表中的重复项,可以使用
UNION
/
UNION DISTINCT
对其进行更改。感谢评论

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
语句中分别使用一个带有不同值别名的硬编码值即可。

您可以尝试以下方法:

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

您需要的是一个
工会

          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;
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

你的最后一部分有ColC,但没有ColC。你和所有人联合可能会更好。否则我就投了票。工会将失去任何重复的行。问题并没有具体说明这是否可以,但应该指出。