두 개의 테이블을 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 |
---|