2016-11-19 383 views
1

我想将SQLite数据库中的三个表合并成一个新的组合表。这三个表具有相同的列名,但第三个表缺少其中一列。下面是我想做到这一点:连接表(UNION ALL)其中一个表缺少其中一列

CREATE TABLE cobmined 
AS 
SELECT col1, col2, col3 
FROM 
    (
    SELECT col1, col2, col3 from table1 
    UNION ALL 
    SELECT col1, col2, col3 from table2 
    UNION ALL 
    SELECT col1, col2  from table3 
    ) s 
; 

只对前两个表执行此操作时这工作,加入第三个表时,我得到的消息:

SELECTs to the left and right of UNION do not have the same number of result columns 

是否有办法让SQL忽略缺少的列,并在需要时将其留空(NULL)?

回答

2

NULL值添加到第三个表

CREATE TABLE cobmined 
AS 
SELECT col1, col2, col3 
FROM 
    (
    SELECT col1, col2, col3 from table1 
    UNION ALL 
    SELECT col1, col2, col3 from table2 
    UNION ALL 
    SELECT col1, col2, null from table3 
    ) s 
; 

而且,无需子查询

CREATE TABLE cobmined 
AS 
SELECT col1, col2, col3 from table1 
UNION ALL 
SELECT col1, col2, col3 from table2 
UNION ALL 
SELECT col1, col2, null from table3 
+0

感谢Dudu的快速反应和建议。它效果很好。 –

0

我要指出,你不需要子查询:

CREATE TABLE combined AS 
     SELECT col1, col2, col3 from table1 
     UNION ALL 
     SELECT col1, col2, col3 from table2 
     UNION ALL 
     SELECT col1, col2, NULL from table3; 

此外,您可能会发现视图比实际表更适合您的目的。

+0

这不是有效的SQL。 –

相关问题