by 포동푸우 [SQL Query] MariaDB IF ELSE 2개 문장 1개로 병합. [2022.07.04 10:14:56]
-- 문장을 효율적으로 수정하려면, 어느 부분을 더 수정해야 할지 조건을 부탁드립니다.
-- 실행 환경은 MariaDB 입니다.
-- 안녕하세요.,, 아래의 2개 문장을 한번에 실행하려고, IF 문을 사용해서 아래와 같이 변경해 보았습니다.
-- SQL1
UPDATE TB_APRV
SET PROC_PRGM_ID = 'TEST'
WHERE APRV_DOC_ID = 'A20220704100201'
AND APRV_ORD = 6
AND SB_APRV_ORD = 1
AND ( SELECT COUNT(*) CNT
FROM TB_APRV
WHERE APRV_DOC_ID = 'A20220704100201'
AND APRV_ORD IN (4,5)
AND APRV_RJCT_YN IS NULL) = 0
-- SQL2
UPDATE TB_APRV
SET PROC_PRGM_ID = 'TEST'
WHERE APRV_DOC_ID = 'A20220704100201'
AND APRV_ORD = 5
AND SB_APRV_ORD = (1+1)
AND ( SELECT COUNT(*) CNT
FROM TB_APRV
WHERE APRV_DOC_ID = 'A20220704100201'
AND APRV_ORD IN (4,5)
AND APRV_RJCT_YN IS NULL) > 0
-- SQL1+2
IF (SELECT count(*) CNT
FROM TB_APRV
WHERE APRV_DOC_ID = 'A20220704100201'
AND APRV_ORD IN (4,5)
AND APRV_RJCT_YN IS NULL) = 0 then
UPDATE TB_APRV SET PROC_PRGM_ID = 'TEST'
WHERE APRV_DOC_ID = 'A20220704100201'
AND APRV_ORD = 6
AND SB_APRV_ORD = 1
ELSE
UPDATE TB_APRV SET PROC_PRGM_ID = 'TEST'
WHERE APRV_DOC_ID = 'A20220704100201'
AND APRV_ORD = 5
AND SB_APRV_ORD = (1+1)
END IF
-- 문장을 효율적으로 수정하려면, 어느 부분을 더 수정해야 할지 조건을 부탁드립니다.
-- 한 방 쿼리 --
UPDATE tb_aprv a
INNER JOIN
(SELECT CASE WHEN COUNT(*) = 0 THEN 6 ELSE 5 END aprv_ord
, CASE WHEN COUNT(*) = 0 THEN 1 ELSE 2 END sb_aprv_ord
FROM tb_aprv
WHERE aprv_doc_id = 'A20220704100201'
AND aprv_ord IN (4, 5)
AND aprv_rjct_yn IS NULL
) b
ON a.aprv_doc_id = 'A20220704100201'
AND a.aprv_ord = b.aprv_ord
AND a.sb_aprv_ord = b.sb_aprv_ord
SET proc_prgm_id = 'TEST'
;