by 뽕뽕 [SQL Query] UPDATE WHERE EXISTS [2016.02.01 17:31:17]
여러모로 배울게 많은 사이트네요.^^
궁금한게 있는데요.
아래 CASE1, CASE2의 큰 차이점이 뭔가요?
속도?? 큰 차이가 있나요?
매번 CASE2와 같이 쿼리 작성을 하거든요.
이번에 UPDATE가 어떻게 수행되는지 알고 싶네요...
CASE1
UPDATE TABLE1 T1
SET COL2 = (SELECT COL2
FROM TABLE2
WHERE COL1 = T1.COL1)
WHERE COL1 IS NOT NULL
UPDATE TABLE1 T1
SET COL2 = (SELECT COL2
FROM TABLE2
WHERE COL1 = T1.COL1)
WHERE COL1 IS NOT NULL
AND EXISTS (SELECT COL1
FROM TABLE2
WHERE COL1 = T1.COL1)
답변 감사합니다.
제 스스로 잘못 알고 있었던 부분이 있네요.
CASE1 UPDATE TEST1 T1 SET COL2 = (SELECT COL2 FROM TEST2 WHERE COL1 = T1.COL1) WHERE COL1 IS NOT NULL AND EXISTS (SELECT COL1 FROM TEST2 WHERE COL1 = T1.COL1) ; CASE2 UPDATE TEST1 T1 SET COL2 = (SELECT COL2 FROM TEST2 WHERE COL1 = T1.COL1) WHERE COL1 IS NOT NULL AND COL1 IN (SELECT COL1 FROM TEST2 WHERE COL1 = T1.COL1) ;
CASE1, CASE2의 속도 비교가 맞겠네요.
궁금한데 어떤게 빠른지 답변 가능할까요? 현장에서는 어떻게 주로 쓰는지 궁금하네요.
정확한 의도는 모르겠지만, B테이블 정보를 A테이블에 마이그레이션 하는 용도로 보입니다.
CASE1: 테이블1의 COL1이 NULL이 아닐 때, 테이블1, 2의 COL1들을 비교하여 일치 하는것에 대한 테이블2의 COL2 정보를 테이블1에 업데이트 한다.
CASE2: 테이블1의 COL1이 NULL이 아니고, 테이블2의 COL1 정보가 테이블1의 COL1와 일치 하는게 있으면 테이블1, 2의 COL1들을 비교하여 일치 하는것에 대한 테이블2의 COL2 정보를 테이블1에 업데이트 한다.
단순 CASE1과 CASE2를 수행하는 것을 비교 했을 때 시간이 오래 걸리는 작업은 CASE2입니다.
[추가쿼리]
UPDATE TABLE1 T1 INNER JOIN TABLE2 T2 ON T1.COL1 = T2.COL1 SET T1.COL2 = T2.COL2
- 위에 사용 하신 쿼리를 이렇게 표현 하실 수도 있습니다.
*추가적으로 INDEX가 걸려 있다 하더라도 NULL값 비교시에는 INDEX가 적용 되지 않습니다.