2011-10-05 64 views
3

我想用内部连接编写一个简单的更新语句,但是我在SQL服务器中执行此操作的方式似乎不适用于ORACLE。这是更新:带有内部连接的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。有人可以解释,以解决这是什么原因以及如何解决它?

回答

7

在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;