오라클을 사용하시는분들이 아래 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 |