PL-SQL 조건실행을 SQL WHERE절로 0 2 3,168

by 구사일생 [SQL Query] 조건실행을SQL로 [2023.04.27 21:09:13]


--간략 설명

SELECT COUNT(*) CNT FROM AAA WHERE DATE = '20230401'

 

IF CNT > 0 THEN 

INSERT INTO BBB

SELECT * FROM CCC

 WHERE 1=1

     AND 2=2

     AND 3=3

------------------------------------------------

간략히 위 와 같은 소스가 있을 때 특정테이블 일자에 데이터가 존재 하면 하단의 INSERT 문이 실행 되어야 할때

이것을 SQL의 WHERE문으로는 어떻게 할수 있을까요?

예를 들어서 

INSERT INTO BBB

SELECT * FROM CCC

 WHERE 1= (

                   SELECT CASE WHEN COUNT(*) > 0 THEN 1 ELSE 2 END

                     FROM AAA

                    WHERE DATE = '20230401'

               )

     AND 2=2

     AND 3=3

이런식으로 하면 될듯은 합니다.

여기서 진짜 질문

WHERE문의 첫번째 줄이 먼저 실행될 때 건수가 0이면

1=2 로 실패하여 나머지 WHERE문을 실행하지 않고 바로 멈추 것나 성공시 실행 될수 있는 방법

혹시 다른 좋은 방법이 있을까요?

(WHERE문을 모두 다 실행 하고 한참 시간이 걸린 후에 멈추면 안 될것 같아서)

고수님들의 고견을 듣고 싶습니다.

by 우리집아찌 [2023.04.29 16:02:30]

Merge Into 구문으로 바꾸시면 될것같긴한데요.


by 마농 [2023.05.03 09:16:45]

1. CASE 문은 불필요해 보입니다. COUNT(*) 서브쿼리를 직접 값과 비교하면 됩니다.
2. COUNT 가 1이라면 큰 차이 없겟지만 1 이상이라면? EXISTS 구문이 더 나을 수 있습니다.
3. 서브쿼리가 반복 수행될지 여부는? 직접 테스트 해보시면 될 것 같습니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입