채택완료
SQL문장에서 다중 UPDATE를 진행해야할 경우, 하나의 SQL문으로 통합하는 방법
Copy
$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개 / 댓글 5개
채택된 답변
+20 포인트
2022-11-28 (월) 17:11:24
Copy
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'
;
답변에 대한 댓글 5개
qoqofh
2022-11-28 (월) 17:33:14
2022-11-28 (월) 18:27:43
동작을 안하진 않겠지만
질문 올리신 UPDATE 쿼리는 전체를 대상으로 하는 쿼리였고(TB1.SAVE = 'Y' / TB1.SAVE = 'N' 조건이 있기는 하나, 단수 row 하나만 업데이트하는 용도라고 보여지지 않음),
그 둘을 하나로 합친것 뿐이라서
트리거에 선언된 FOR EACH ROW 구문과 관계없이 동작할 것이므로
효율적인 트리거는 아닌것 같습니다.
질문 올리신 UPDATE 쿼리는 전체를 대상으로 하는 쿼리였고(TB1.SAVE = 'Y' / TB1.SAVE = 'N' 조건이 있기는 하나, 단수 row 하나만 업데이트하는 용도라고 보여지지 않음),
그 둘을 하나로 합친것 뿐이라서
트리거에 선언된 FOR EACH ROW 구문과 관계없이 동작할 것이므로
효율적인 트리거는 아닌것 같습니다.
qoqofh
2022-11-29 (화) 08:49:33
효율적으로 트리거를 구성하려할때 참고할만한 자료가 있을까요 ㅠㅠ?
크론텝도 생각은 하고 있지만, 최대한 트리거로 구성해보려 합니다
크론텝도 생각은 하고 있지만, 최대한 트리거로 구성해보려 합니다
2022-11-29 (화) 15:44:54
전에 알려드렸던
https://dev.mysql.com/doc/refman/5.7/en/trigger-syntax.html
에서 예제가 나와있습니다.
보고 응용하시면 될것 같습니다.
https://dev.mysql.com/doc/refman/5.7/en/trigger-syntax.html
에서 예제가 나와있습니다.
보고 응용하시면 될것 같습니다.
답변을 작성하려면 로그인이 필요합니다.
[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]