본문 바로가기

콩's EDUCATION/콩's DATABASE

다중 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


실 업무에서도 많이 사용되는 다중 조인의 경우를 살펴봅니다.


예를들어

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;


인라인뷰를 한차례 더 주어서 이래저래 변형이 가능할 것 같네요.