테스트 사이트 - 개발 중인 베타 버전입니다

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

qoqofh 2년 전 조회 2,078

</p>

<p>$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'

        ";</p>

<p>$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'

        ";</p>

<p>

 

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

댓글을 작성하려면 로그인이 필요합니다.

답변 1개

채택된 답변
+20 포인트
2년 전

</p>

<p>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'

;</p>

<p>

로그인 후 평가할 수 있습니다

답변에 대한 댓글 5개

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

[code]
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;
[/code]
배르만
2년 전
동작을 안하진 않겠지만
질문 올리신 UPDATE 쿼리는 전체를 대상으로 하는 쿼리였고(TB1.SAVE = 'Y' / TB1.SAVE = 'N' 조건이 있기는 하나, 단수 row 하나만 업데이트하는 용도라고 보여지지 않음),
그 둘을 하나로 합친것 뿐이라서
트리거에 선언된 FOR EACH ROW 구문과 관계없이 동작할 것이므로
효율적인 트리거는 아닌것 같습니다.
q
qoqofh
2년 전
효율적으로 트리거를 구성하려할때 참고할만한 자료가 있을까요 ㅠㅠ?
크론텝도 생각은 하고 있지만, 최대한 트리거로 구성해보려 합니다
배르만
2년 전
전에 알려드렸던
https://dev.mysql.com/doc/refman/5.7/en/trigger-syntax.html
에서 예제가 나와있습니다.
보고 응용하시면 될것 같습니다.
q
qoqofh
2년 전
감사합니다. 너무 큰도움되었네요 ㅎㅎ

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인