문제 링크 : https://velog.io/@yooha9621/SQLP실기문제-대량DML튜닝34번
SQL >
UPDATE 상품재고 T
SET T.품질유지일 =
NVL((SELECT TRUNC(SYSDATE) - TO_DATE(MAX(A. 변경일자), 'YYYYMMDD')
FROM 상품재고이력 A, 상품재고 B
WHERE A. 상품번호 = B. 상품번호
AND B. 업체코드 = 'Z'
AND B. 가용재고량 = 0
AND NVL(B.가상재고수량, 0) 〈= 0
AND A.상품번호 = T.상품번호
GROUP BY A.상품번호 )
, T.품질유지일)
WHERE T.업체코드 = 'z'
AND T.가용재고량 = 0
AND NVL(T. 가상재고수량, 0) <= 0;
SQL >
UPDATE 상품재고 T
SET T.품절유지일 =
(SELECT TRUNC(SYSDATE) - TO_DATE(MAX(변경일자),'YYYYMMDD') 품질유지일
FROM 상품재고이력 A
WHERE A.상품번호 = T.상품번호)
WHERE T.업체코드 = 'z'
AND T.가용재고량 = 0
AND NVL(T. 가상재고수량, 0) <= 0
AND EXISTS (
SELECT /*+nl_sj unnest*/ 'X'
FROM 상품재고이력
WHERE 상품번호 = T.상품번호
);
🍎 정리
- EXISTS문으로 NL_SJ 조인을 이용해 2번 액세스하는 걸 1번 액세스로 줄여 update하였다.