중복 조인을 피하기 위한 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
'프로그래밍 언어 > 쿼리문 + Oracle + MySQL' 카테고리의 다른 글
[쿼리문] Merge into를 이용해서 insert나 update를 자동으로 실행하자. (0) | 2015.02.04 |
---|---|
[쿼리문] 조건절에 WHERE 1=1, WHERE 1=0 사용하여 쿼리 간편하게 사용하기 (0) | 2014.11.01 |
단일행을 다중 row로 분리, 다중 row 결과를 단일행으로 연결하는 방법 (0) | 2011.03.14 |
[Oracle] 오라클에서 WITH문으로 쿼리를 임시테이블이나 View처럼 사용하자. (5) | 2011.03.03 |
[쿼리문/오라클] Oracle 저장 프로시저 샘플 (0) | 2011.01.25 |
댓글