【问题标题】:Oracle Update statement with an Inner Join带有内部联接的 Oracle 更新语句
【发布时间】:2011-12-01 15:13:19
【问题描述】:

我正在尝试使用内部连接编写一个简单的更新语句,但我在 SQL Server 中执行此操作的方式似乎不适用于 ORACLE。这是更新:

UPDATE D
SET D.USER_ID = C.USER_ID
FROM D INNER JOIN C 
ON D.MGR_CD = C.MGR_CD WHERE D.USER_ID IS NULL;

看来我遇到的错误是在FROM 上。有人可以解释一下这是什么原因以及如何解决它吗?

【问题讨论】:

    标签: oracle inner-join


    【解决方案1】:

    在 Oracle 中,您不能以这种方式在 update statement 中使用 from 子句。以下任何一项都应该有效。

    UPDATE d
    SET    d.user_id   =
              (SELECT c.user_id
               FROM   c
               WHERE  d.mgr_cd = c.mgr_cd)
    WHERE  d.user_id IS NULL;
    
    UPDATE (SELECT d.user_id AS d_user_id, c.user_id AS c_user_id
            FROM   d INNER JOIN c ON d.mgr_cd = c.mgr_cd
            WHERE  d.user_id IS NULL)
    SET    d_user_id   = c_user_id;
    
    UPDATE (SELECT d.user_id AS d_user_id, c.user_id AS c_user_id
            FROM   d INNER JOIN c ON d.mgr_cd = c.mgr_cd)
    SET    d_user_id   = c_user_id
    WHERE  d_user_id IS NULL;
    

    但是,我更喜欢在这种情况下使用MERGE

    MERGE INTO d
    USING      c
    ON         (d.mgr_cd = c.mgr_cd)
    WHEN MATCHED THEN
        UPDATE SET d.user_id = c.user_id
            WHERE      d.user_id IS NULL;
    

    【讨论】:

      猜你喜欢
      • 2011-01-27
      • 1970-01-01
      • 1970-01-01
      • 2011-04-21
      • 2014-06-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多