SQL문장에서 다중 UPDATE를 진행해야할 경우, 하나의 SQL문으로 통합하는 방법

매출이 오르면 내리는 수수료! 지금 수수료센터에서 전자결제(PG)수수료 비교견적 신청해 보세요!
SQL문장에서 다중 UPDATE를 진행해야할 경우, 하나의 SQL문으로 통합하는 방법

QA

SQL문장에서 다중 UPDATE를 진행해야할 경우, 하나의 SQL문으로 통합하는 방법

본문


$sql3 = "
        UPDATE
            database.data1 TB1 INNER JOIN database.data2 TB2
        ON
            TB1.number = TB2.number
        SET
            TB2.YN = 'A'
          , TB2.YN_DT = now()
        WHERE
            TB1.SAVE = 'Y'
        ";
$sql4 = "
        UPDATE
            database.data1 TB1 INNER JOIN database.data2 TB2
        ON
            TB1.number = TB2.number
        SET
            TB2.YN = 'B'
          , TB2.YN_DT = now()
        WHERE
            TB1.SAVE = 'N'
        ";

 

이 SQL문장을 하나의 SQL문장으로 변경이 가능할까요? 가능하다면 자문좀 구해봅니다 ㅠ

이 질문에 댓글 쓰기 :

답변 1


UPDATE
    database.data1 TB1 INNER JOIN database.data2 TB2
ON
    TB1.number = TB2.number
SET
     TB2.YN = (CASE TB1.SAVE WHEN 'Y' THEN 'A' WHEN 'N' THEN 'B' END)
    ,TB2.YN_DT = now()
WHERE
    TB1.SAVE = 'Y' OR TB1.SAVE = 'N'
;

트리거 사용할 경우에는 이런식으로 SQL작성하면 될까요?


CREATE TRIGGER data1_trigger
        BEFORE
        UPDATE ON database.data1
            FOR EACH ROW
        BEGIN

UPDATE
    database.data1 TB1 INNER JOIN database.data2 TB2
ON
    TB1.number = TB2.number
SET
    TB2.YN = (CASE TB1.SAVE WHEN 'Y' THEN 'A' WHEN 'N' THEN 'B' END)
    ,TB2.YN_DT = now()
WHERE
    TB1.SAVE = 'Y' OR TB1.SAVE = 'N'
END;

동작을 안하진 않겠지만
질문 올리신 UPDATE 쿼리는 전체를 대상으로 하는 쿼리였고(TB1.SAVE = 'Y' / TB1.SAVE = 'N' 조건이 있기는 하나, 단수 row 하나만 업데이트하는 용도라고 보여지지 않음),
그 둘을 하나로 합친것 뿐이라서
트리거에 선언된 FOR EACH ROW 구문과 관계없이 동작할 것이므로
효율적인 트리거는 아닌것 같습니다.

답변을 작성하시기 전에 로그인 해주세요.
전체 198
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT