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

오라클에서는 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;