【问题标题】:Update table using join- error ORA-00933 [duplicate]使用连接更新表 - 错误 ORA-00933 [重复]
【发布时间】:2018-09-26 01:00:28
【问题描述】:

我有一个表需要通过加入另一个表的条件来更新。

UPDATE a SET a.REF_ID = b.NEW_REF_ID FROM CRS_CUSTOMERS a INNER JOIN DAY0_SUBSET b ON a.CUSTOMER_ID = b.CURRENT_CUSTOMER_ID;

上面的语句只是抱怨ORA-00933: SQL command not properly ended,语法错误在FROM CRS_CUSTOMERS a这一行高亮显示

【问题讨论】:

    标签: oracle join sql-update


    【解决方案1】:

    你需要一个嵌套的子选择:

    UPDATE CRS_CUSTOMERS a
     SET a.REF_ID = ( SELECT b.NEW_REF_ID
                       FROM DAY0_SUBSET b
                      WHERE a.CUSTOMER_ID = b.CURRENT_CUSTOMER_ID );
    

    SQL Fiddle Demo

    【讨论】:

    • 您的脚本是正确的,但我想知道它会在 CRS_CUSTOMERS 中记录所有记录。例如,如果我只需要 REF_ID 的特定客户 ID?
    • @user2102665 不是所有记录,而是单个记录,因为WHERE a.CUSTOMER_ID =。仅单独匹配 a.CUSTOMER_ID = b.CURRENT_CUSTOMER_ID 的更新。
    • 它的工作..谢谢!
    • @user2102665 不客气。
    【解决方案2】:

    这不是有效的 UPDATE 语法。

    建议您尝试类似 [can't test it current, and it假定 ref_id 和 customer_id 在 day0_subset 表中不存在]

    UPDATE CRS_CUSTOMERS
      SET REF_ID =
        (select b.NEW_REF_ID
           from DAY0_SUBSET b
           where b.current_customer_id = customer_id)
      where CUSTOMER_ID in (select b.CURRENT_CUSTOMER_ID from DAY0_SUBSET b)
    

    【讨论】:

    • 它的工作..谢谢!
    猜你喜欢
    • 1970-01-01
    • 2021-03-16
    • 2010-11-22
    • 2015-08-24
    • 2012-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多