웹앱프로젝트/Mysql
다른 테이블과의 비교를 통한 update 문 (mysql)
Minah Park
2022. 7. 11. 15:20
반응형
prep_sdet_info 테이블 의 정보가 sdet_info 테이블 에도 있고 sdet_info의 STUS 컬럼이 '정상' 인 row 들만 update하게 하고 싶었다. 그래서 내가 먼저 짠 쿼리는......
바로!!!!
UPDATE
prep_sdet_info as ps
,sdet_info AS s
SET ps.APRV_CNT = 1
WHERE ps.KEDI_CD=s.KEDI_CD
AND ps.SDET_NM=s.SDET_NM
AND ps.GDE=s.GDE
AND ps.CLA=s.CLA
AND ps.SDET_NO=s.SDET_NO
AND s.STUS='정상'
AND ps.APRV_CNT=0;
그런데!!!!! 역시 무엇인가 불안했다. 그래서 물어봤다!! update문은 신중해야하기에..... 당연히 이 쿼리도 작동은 하지만 직관적이지않아 바로 해석이 되지 않는다 했다. 코드는 심플하고 직관적이게!!! 해야하니깐
그래서 알려주신 방법!!!!
UPDATE
prep_sdet_info as ps
SET ps.APRV_CNT = 1
WHERE 0 < (
SELECT
COUNT(*)
from
sdet_info AS s
WHERE
ps.KEDI_CD=s.KEDI_CD
AND ps.SDET_NM=s.SDET_NM
AND ps.GDE=s.GDE
AND ps.CLA=s.CLA
AND ps.SDET_NO=s.SDET_NO
AND s.STUS='정상')
AND ps.APRV_CNT=0;
결국 이 개념을 내가 잘 이해하지 못해서 매번 헷갈리는거다.
즉, 이 UPDATE문이 실행되는 방식은 일단, 먼저 UPDATE시키고자하는 테이블을 기준으로 한 row의 데이터를 선택하고 WHERE 조건문에 있는 서브쿼리의 조건에 맞는지를 확인해서, COUNT(*)를 해보고 0보다 크면 (즉, 조건에 해당하는 ROW 이면) UPDATE문을 실행하는거다.
한 ROW 씩 읽고 조건에 맞으면 UPDATE가 되고 안되고하면서 넘어가는거다.
반응형
반응형