반응형

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가 되고 안되고하면서 넘어가는거다. 

반응형

 

반응형
반응형

mybatis를 이용할 때, 회원가입과 같은 로직을 진행할 때 두테이블에 insert를 해줘야하는데 첫번째 테이블에서 insert할때 생성되는 값을 두번째 테이블 insert시에 필요할때 사용!!!

엄청 유용하다!!!

나는 회원가입시에 학부모 회원가입에 먼저 insert되고, 회원가입 테이블에서 IDX 값(auto_increment가 걸려있음)을 학부모 매칭 테이블에 FK값으로 가져와야한다. 이럴 경우, 신기하게 selectKey 를 사용하면 편하다!!!! 

resultType : 해당 컬럼의 타입
keyProperty : 가져오고싶은 컬럼명
order : 쿼리 실행 전에 가져올 것인지, 실행 후에 가져올 것 인지

여기서 처음에 받아온 params 에는 insert 처음에 들어가는 키값들이 들어가 있고, AddNewParent 가 실행된 후에 원했던, IDX값이 {IDX : 값} 이렇게 추가 되어서 출력이 되어진다!!!

그래서 위에서 처음 로그 찍어봤을때랑 AddNewParent가 실행된 후에 찍어봤을때의 params에는 원했던 갑이 추가되어진 map으로 찍힐것이다!!!

 

반응형

+ Recent posts