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