본문으로 바로가기

두 개의 테이블을 Join하여 Update, Delete를 하는 법



# JOIN에 대한 UPDATE 

SET 절에 SUB_QUERY형태로 작성하면 된다.



먼저 예제 스키마를 한 번 보자.



TABLE : KIM_IMS_PERSON


TABLE : KIM_IMS_PERSON_BACK



예제1 : B 테이블에서 PER_ID가 같은 사람을 A 테이블의 PHONE 컬럼에 업데이트 시켜라.

UPDATE KIM_IMS_PERSON_BACK A

   SET PHONE = (

   SELECT PHONE

                FROM KIM_IMS_PERSON B

                WHERE B.PER_ID = A.PER_ID

               );


[결과] - PER_ID가 TEST(일치)인 컬럼의 PHONE 데이터가 업데이트 되었다. 





# JOIN에 대한 DELETE

WHERE 절에 JOIN조건을 작성하면 된다.


예제2 : A 테이블에서 PER_ID가 같은 사람의 데이터를 지워라.

DELETE

FROM KIM_IMS_PERSON_BACK A

WHERE EXISTS

(

    SELECT 1

    FROM KIM_IMS_PERSON B

    WHERE A.PER_ID = B.PER_ID

);



[결과] - PER_ID가 TEST(일치)인 데이터가 삭제되었다. 


 


 # 주의!! Oracle 11g 이상 버전에서는 아래와 같은 힌트를 사용할 수 없다. (과거 Join Update시 사용)


UPDATE /*+ BYPASS_UJVC*/

(

    SELECT A.PHONE C, B.PHONE D

    FROM KIM_IMS_PERSON_BACK A, KIM_IMS_PERSON B

    WHERE A.PER_ID = B.PER_ID

)

SET C = D;


* 현재는 Merge into 등을 사용하여 힌트를 대체하거나 위처럼(예제1) 사용하면 된다.



# 궁금한점은 댓글 남겨주시면 부족한 지식이지만 답변 드리겠습니다.



참고 자료 :

1. GUI sin : 두 개의 Table을 join하여 update하기

http://guisin.net/127

2. 개발자인생 : Oracle에서 join을 이용한 Update문

http://hspmuse.tistory.com/entry/%EC%98%A4%EB%9D%BC%ED%81%B4%EC%97%90%EC%84%9C-join%EC%9D%84-%EC%9D%B4%EC%9A%A9%ED%95%9C-update%EB%AC%B8

'Oracle > Oracle Applications' 카테고리의 다른 글

[Oracle] DB에서 excel파일 데이터 Import, Export  (2) 2017.10.20