참고 사이트 - 개발자 인생 티스토리 블로그
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
실 업무에서도 많이 사용되는 다중 조인의 경우를 살펴봅니다.
예를들어
A 테이블이 있고, A_BACKUP 테이블이 있습니다.
A 테이블에 있는 내용은 원본으로서 가치가 있어 결코 수정/삭제 등의 행위가 있으면 안되는 테이블입니다.
A_BACKUP 테이블은 해당 테이블을 활용하여 뷰 생성 혹은 기타 테스트 할 수 있는 A 복사본 테이블입니다.
추가로 A_BACKUP 테이블은 A테이블에서 필요없는 몇가지 컬럼은 뺀 상태로 복사합니다.
보통의 경우 A_BACKUP은 주기적으로 A테이블 내용을 복사해오겠지요?
솔루션 이든 기타 여러가지 방법을 사용하시는데 일단 수동으로 하는 방법중 하나를 소개해드립니다.
특정 컬럼만 조인하는 방법은 아래와 같습니다.
UPDATE /*+ BYPASS_UJVC */
(
SELECT A.COL1 COL1
, B.COL2 COL2
FROM TAB1 A
, TAB2 B
WHERE A.KEY = B.KEY
)
SET COL1 = COL2
B테이블에 있는 COL2의 데이터를 A테이블 COL1값에 복사하겠다는 뜻입니다.
A,B테이블의 PK를 WHERE 조건으로 두면 똑같은 정보가 복사되겠죠?
만약 OUTER JOIN(+)을 주시면 복사 받는 테이블의 PK값이 없으면 오류가 발생할 수 있습니다.
이를 응용하셔서 사용하셔도 될 것 같습니다.
UPDATE /*+ BYPASS_UJVC */
(
SELECT A.COL1 COL1 , B.COL2 COL2, C.COL3 COL3, D.COL4 COL4
FROM TAB1 A
, TAB2 B
WHERE A.KEY = B.KEY
)
SET COL1 = COL2, COL3 = COL4;