반응형
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가 되고 안되고하면서 넘어가는거다.
반응형
반응형
'웹앱프로젝트 > Mysql' 카테고리의 다른 글
[오라클] 조회 순번 매기는 방법(rownum, row번호 출력), 조건별로 그룹 조회 방법(group by) (0) | 2022.09.06 |
---|---|
LEFT OUTER JOIN 한 쪽 테이블에 없어도 join해서 null로 보여줌 (0) | 2022.07.14 |
HeidiSQL 에서 데이터베이스 생성, 테이블 생성 (0) | 2022.07.01 |
mysql 에서 요일 추출하기 (CASE이용, SUBSTR이용) (0) | 2022.01.10 |
MYSQL WHERE절의 우선순위 (AND와 OR) (0) | 2022.01.10 |