【问题标题】:Redshift : Based on whether column exists in table_1, create another table and assign column valuesRedshift :根据table_1中是否存在column,创建另一个表并分配column值
【发布时间】:2018-05-17 17:35:41
【问题描述】:

我在 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”的临时表:

  1. 选择名为的 3 列 'column_name_1','column_name_2','column_name_3'

我确定它已经存在于“table_1”中。

  1. 选择名为“column_n”的列,我不确定它是否存在于“table_1”中。如果 'table_1' 中存在 'column_n',则直接选择它,如果不存在,则在 'temp_table' 中创建一个名为 'column_n' 的列,并为其所有行分配一个字符值 'val_n'。

所以我最终的“temp_table”将如下所示:

  1. 如果“table_1”中存在“column_n”

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
....           ....            ....            ....   
  1. 如果“table_1”中不存在“column_n”

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,但不知何故,我没有成功测试创建临时表中的条件。

【问题讨论】:

    标签: sql case amazon-redshift create-table alter-table


    【解决方案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 没有该列。

    【讨论】:

      【解决方案2】:

      这不是您应该尝试通过 SQL 查询来做的事情。

      相反,使用诸如SVV_TABLES 之类的系统表和视图来检索有关表的信息,然后构造适当的 SQL 语句来选择/插入您的数据。

      为了澄清,确定哪些列存在以及哪些列要插入/复制的逻辑应该在 Amazon Redshift 之外完成。然后,将生成的命令发送到 Redshift 以与数据进行交互。

      【讨论】:

        猜你喜欢
        • 2023-01-25
        • 2021-07-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-12-01
        • 2020-01-03
        • 2014-03-13
        • 1970-01-01
        相关资源
        最近更新 更多