DB

오라클 다중 IN MSSQL에서는 EXISTS로 해보자

조셉(개발자) 2024. 11. 4. 07:10
반응형

오라클을 사용하시는분들이 아래 IN절을 사용하다 MSSQL을 사용하게 되면 불편해 하신다.

아래 문장이  도움이 되기를 바란다.

SELECT *
 FROM TEMPA
 WHERE (A, B) IN (
                         SELECT A, B
                           FROM TEMPB
                         WHERE C ='Y')

DELETE
 FROM TEMPA
 WHERE (A, B) IN (
                         SELECT A, B
                           FROM TEMPB
                         WHERE C = 'Y' )


위에 SELECT 문을 DELETE로 바꿔서 아주 잘사용하셨다고 한다. 
그런데 MSSQL은 어떻게 하나 물어보신다 

답은 EXISTS를 사용하시라고 권해 드린다. 

SELECT A.*
 FROM TEMPA A
 WHERE EXISTS (
                        SELECT 1
                          FROM TEMPB B
                        WHERE B.A = A.A
                           AND B.B. = A.B
                           AND C = 'Y' 
)

SELECT문은 이렇게 사용하면 되지만 DELETE문은 아마 에러가 발생할것이다.

DELETE
 FROM TEMPA
 WHERE EXISTS (
                        SELECT 1
                          FROM TEMPB B
                        WHERE B.A = TEMPA.A
                           AND B.B. = TEMPA.B
                           AND C = 'Y' 
)

본테이블에 별칭을 삭제후 테이블 원래의 이름으로 해주면 오류 없이 정상 실행된다.

나는 이런것 신용못하겠다 . 그럼 JOIN문으로 만들어 사용하시기를 바란다.

 
 
반응형

'DB' 카테고리의 다른 글

WHERE 조건에 CASE문 처리  (1) 2024.11.06
DB 정렬 ORDER BY 관련  (0) 2024.11.05
MS-SQL 나이 구하기(만나이)  (0) 2024.10.28
DB 쿼리 정렬해주는 툴  (0) 2024.10.16
MS-SQL Management툴로 실행한 이전 쿼리 확인방법  (0) 2024.10.15