DB

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

조셉LEE 2024. 3. 7. 09:00
728x90
반응형

오라클을 사용하시는분들이 아래 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문으로 만들어 사용하시기를 바란다.

반응형
LIST

'DB' 카테고리의 다른 글

[MS-SQL] 나이 구하기(만나이)  (0) 2024.03.09
[MS-SQL] 고정문자열 표현하기 ('01')  (0) 2024.03.08
DB 정렬 ORDER BY 관련  (1) 2024.03.07
WHERE 조건에 CASE문 처리  (0) 2024.03.07
[MSSQL] STUFF() / FOR XML PATH()  (0) 2024.03.05