使用条件和多个来源创建表

时间:2018-10-05 09:09:52

标签: sql oracle

我需要用其他两个表中的列创建一个表。 我还需要在几个列上设置条件(通常测试该行的值是否不为空)。 我尝试了几种方法,但是在没有进行任何条件测试的情况下,我仅设法从另一张表中添加了尽可能多的列。

基本上是我想做的:

CREATE TABLE target_table
AS(        
SELECT column1 FROM source_table1 WHERE column1 IS NOT NULL
UNION
SELECT column2, column3 FROM source_table1
UNION
SELECT column1 FROM source_table2
)

通过此查询,我得到:“查询块的结果列数不正确”错误。

我也尝试过这个:

CREATE TABLE target_table
AS(        
SELECT column1 FROM source_table1 WHERE column1 IS NOT NULL
UNION
SELECT column2 FROM source_table1
)

它“正常”,因为没有错误,但是我的target_table中没有column2行。 这可能是微不足道的,但是我无法找到带有条件和多个列来源的此类表创建的任何答案。

3 个答案:

答案 0 :(得分:1)

联合运算符的列数应该相同 和数据类型也必须相同

CREATE TABLE target_table
AS select * from    
 (        
SELECT column1, ' ' as column3 FROM source_table1 WHERE column1 IS NOT NULL
UNION
SELECT column2, column3 FROM source_table1
UNION
SELECT column1, '' FROM source_table2
) t

因此您查询的列数不相同

答案 1 :(得分:0)

这很简单。您只需要添加一个空列即可只获得一个。不要忘记将列转换为数据类型。波纹管示例适用于字符串类型列。如果要从source_table2获取整数列,则将此select语句放在所有语句之上。

CREATE TABLE target_table
AS(        
SELECT column1 , '' FROM source_table1 WHERE column1 IS NOT NULL
UNION
SELECT column2, column3 FROM source_table2
UNION
SELECT column1 , '' FROM source_table3
)

答案 2 :(得分:0)

这很简单。您只需要添加一个空列即可只获得一个。不要忘记将列转换为数据类型。波纹管示例适用于字符串类型列。

CREATE TABLE target_table
AS(        
SELECT column1 , '' FROM source_table1 WHERE column1 IS NOT NULL
UNION
SELECT column2, column3 FROM source_table2
UNION
SELECT column1 , '' FROM source_table3
)

如果要从source_table2中获取整数列,则将此选择语句放在所有这些之上。

CREATE TABLE target_table
    AS(    
 SELECT column2, column3 FROM source_table2    
    UNION
    SELECT column1 , null FROM source_table1 WHERE column1 IS NOT NULL


    UNION
    SELECT column1 , null FROM source_table3
    )