오라클을 사용하시는분들이 아래 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' 카테고리의 다른 글
[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 |