Oracle内连接的更新语句

13 浏览
0 Comments

Oracle内连接的更新语句

我想用内连接来编写一个简单的更新语句,但在ORACLE中,我在SQL Server中的做法似乎不起作用。这是更新语句:

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的错误。有人可以解释一下这个错误的原因以及如何解决吗?

0
0 Comments

Oracle中,在update语句中不能像上面那样使用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;

0