【问题标题】:How to update a column using values from another table in Amazon Redshift如何使用 Amazon Redshift 中另一个表中的值更新列
【发布时间】:2018-02-27 12:10:32
【问题描述】:

我有 2 张桌子:

表'A':

Old_eid    new_eid
<null>     <null>
a          <null>
b          <null>
c          <null>

表'B':

eid1    eid2
a         d
b         e
c         f

我想按如下方式更新表“A”:

Old_eid    new_eid
<null>     <null>
a             d
b             e
c             f

我想出了以下查询,但它给了我一个错误:

UPDATE A
   SET new_eid = (SELECT eid2
                  FROM A a
                    JOIN B b ON a.old_eid = b.eid1)
WHERE old_eid IS NOT NULL

但它给了我以下错误:

UPDATE A
       SET new_eid = (SELECT eid2
                      FROM A a
                        JOIN B b ON a.old_eid = b.eid1)
    WHERE old_eid IS NOT NULL

[Amazon](500310) Invalid operation: Invalid Query: 
Details: 
 -----------------------------------------------
  error:  Invalid Query: 
  code:      8001
  context:   single-row subquery returns more than one row
  query:     967978
  location:  8.cpp:78
  process:   padbmaster [pid=15160]
  -----------------------------------------------;

Execution time: 0.35s
1 statement failed.

我可以理解错误,因为它导致多行,但我不确定如何获得我想要的。

如何替换这些值?任何帮助将不胜感激。

【问题讨论】:

    标签: mysql sql postgresql amazon-redshift


    【解决方案1】:

    你可以在下面使用类似的sn-p:

    update test1 set col2=test2.col2
    from test2 
    join test1 cat 
    on test2.col1=cat.col1;
    

    【讨论】:

      【解决方案2】:

      我从未使用过 Amazon RedShift,但在 SQL 中,此代码:

      (SELECT eid2 FROM A a JOIN B b ON a.old_eid = b.eid1)
      

      将为要更新的每一行返回 A 上连接到 B 的所有行。

      你应该使用类似的东西:

      UPDATE A
         SET new_eid = (SELECT eid2
                        FROM B b WHERE A.old_eid = b.eid1)
      WHERE old_eid IS NOT NULL
      

      【讨论】:

        【解决方案3】:

        我能够做到这一点:

        UPDATE A
           SET new_eid = eid2
        FROM B cm 
        WHERE cm.eid1= old_eid
        and old_eidIS NOT NULL
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-08-20
          • 1970-01-01
          • 2015-04-24
          • 2020-09-15
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多