웹앱프로젝트/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가 되고 안되고하면서 넘어가는거다. 

반응형

 

반응형