我在Redshift中有一个名为'table_1'的表,列名为'column_name_1','column_name_2','column_name_3'.......'column_m'等。
table_1
column_name_1 column_name_2 column_name_3 column_name_4 .... column_name_m
我想基于以下条件创建一个名为'temp_table'的临时表:
'column_name_1','column_name_2','column_name_3'
我肯定已经存在于'table_1'中。
所以我的最终'temp_table'将如下所示:
temp_table
column_name_1 column_name_2 column_name_3 column_n
col_1_val_1 col_2_val_1 col_3_val_1 col_n_val_1
col_1_val_2 col_2_val_2 col_3_val_2 col_n_val_2
col_1_val_3 col_2_val_3 col_3_val_3 col_n_val_3
.... .... .... ....
temp_table
column_name_1 column_name_2 column_name_3 column_n
col_1_val_1 col_2_val_1 col_3_val_1 val_n
col_1_val_2 col_2_val_2 col_3_val_2 val_n
col_1_val_3 col_2_val_3 col_3_val_3 val_n
.... .... .... ....
我试图从这个链接中获取一些提示:How can I test if a column exists in a table using an SQL statement,但不知怎的,我没有成功测试创建临时表的条件。
答案 0 :(得分:1)
这真的很棘手。假设您有某种独特的id
列,您可以这样做:
select t1.column1, t1.column2, t1.column3,
(select column_n -- not qualified on purpose
from table1 tt1
where tt1.id = t1.id
) as column_n
from table1 t1 cross join
(select val_n as column_n) x;
这使用作用域逻辑来解析子查询中的column_n
。如果列存在于table1
中,则使用内部引用来填充值。如果不是,则使用x
中的列。在这种情况下没有冲突的危险,因为table1
没有列。
答案 1 :(得分:0)
这不是您应该通过SQL查询尝试做的事情。
相反,使用系统表和视图(如SVV_TABLES)检索有关表的信息,然后构造适当的SQL语句以选择/插入数据。
为了澄清,确定哪些列存在以及要插入/复制哪些列的逻辑应该在Amazon Redshift 之外完成。然后,将生成的命令发送到Redshift以与数据进行交互。