DB/MSSQL

[MSSQL] 오라클의 다중 IN 절 -> MSSQL에서는 EXISTS로!

alien22c 2024. 7. 30. 07:09
728x90
728x90

오라클에서는 다중 IN 절이 가능하다.
MSSQL에서는 어떻게 쿼리를 작성해야할 지 고민한다면 "EXISTS"를 사용하면 된다.
 
다만, EXISTS 사용은 원하는 결과집합이 조회되는지 충분히 테스트해보고 적용바란다.
잘못 쿼리하면 필터링이 안되는 경우도 있으니 실수하지 말자.
 
확실히 하고 싶고 EXISTS 사용을 잘 모르겠으면 안전하게 JOIN문을 사용하도록! 
 

Oracle 예시
SELECT *
FROM T1
WHERE (A,B) IN (SELECT A,B 
                              FROM T2
                              WHERE C='N')

 

DELETE
FROM T1
WHERE (A,B) IN (SELECT A,B 
                              FROM T2
                              WHERE C='N')

 

MSSQL 예시
SELECT A.*
FROM T1 A WITH(NOLOCK)
WHERE EXISTS (SELECT 1
                              FROM T2 B
                              WHERE B.A=A.A
                                    AND B.B=A.B
                                    AND C='N')

 

DELETE T1
FROM T1 WITH(NOLOCK)
WHERE EXISTS (SELECT 1
                              FROM T2 B
                              WHERE B.A = T1.A
                                    AND B.B =T1.B
                                    AND C='N')

 
혹시라도 테이블 Alias 사용 시 에러가 발생한다면,
위의 DELETE구문에서처럼 Main 테이블명 그대로 명시하면 오류없이 정상 실행된다.


728x90
728x90