2011-10-05 36 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;