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

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

QA

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

답변 1

본문


$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 구문과 관계없이 동작할 것이므로
효율적인 트리거는 아닌것 같습니다.

답변을 작성하시기 전에 로그인 해주세요.
QA 내용 검색
질문등록
filter #sql ×
전체 728
© SIRSOFT
현재 페이지 제일 처음으로