중복 조인을 피하기 위한 update 방법에 대해 알아보겠습니다.
UPDATE TotalPoint T SET usePoint = (SELECT usePoint FROM UserPoint U WHERE U.userId = T.userId), totPoint = totPoint + (SELECT usePoint FROM UserPoint U WHERE U.userId = T.userId) FROM userId = 'testUser'
이런식으로 서브쿼리를 2번 같은 내용으로 사용하는 것은 비효율적이다.
만약에 더 많은 컬럼값을 Update해야 한다면 중복이 더 많아질 것이다.
Merge를 사용하면 이러한 중복을 줄일 수 있다.
MERGE INTO TotalPoint T USING ( SELECT userId, usePoint FROM UserPoint U WHERE userId = 'testUser' ) U ON (T.userId = U.userId) WHEN MATCHED THEN UPDATE SET T.totPoint = T.totPoint + U.usePoint, T.userPoint = U.usePoint
이렇게 Merge를 사용하면 중복조인의 문제를 피할 수 있어 좋다.
오라클에서, '중복조인 방지를 위한 UPDATE'에 대한 더 자세한 글은 다음 링크에서 확인할 수 있다.
http://scidb.tistory.com/111