我需要用其他两个表中的列创建一个表。 我还需要在几个列上设置条件(通常测试该行的值是否不为空)。 我尝试了几种方法,但是在没有进行任何条件测试的情况下,我仅设法从另一张表中添加了尽可能多的列。
基本上是我想做的:
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行。 这可能是微不足道的,但是我无法找到带有条件和多个列来源的此类表创建的任何答案。
答案 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
)