2013-06-19 4 views
1

빈 하위 집합과 일치하는 IN 문을 설정할 수 있습니까? #subset이 비어있는 경우 나 또한 그 기록을 싶습니다빈 하위 집합이있는 Tsql IN 절

.. WHERE id IN (SELECT * FROM #subset) 

:

내 쿼리입니다. 해결 방법은 다음과 같습니다

.. WHERE NOT EXISTS(SELECT * FROM #subset) OR id IN (SELECT * FROM #subset) 

제 (SELECT * FROM #subset)는이 아닌하지만 그렇게 간단하게 조회하고 내가 알고 싶습니다 빈 부분 집합의 "IN"를 사용하는 현명한 방법이있다.

+0

# 서브 세트는 어떻게 준비됩니까? 임시 테이블 (표시된대로)? 아니면 질의를위한 단축형입니까? – gbn

답변

3

이중 부정 식을 사용하십시오. 대신

행이 일치하는 존재

..이 행이 일치하지 않는 것을 존재하지

입니다

DECLARE @m TABLE (KeyCol int, Payload varchar(2)); 
DECLARE @s TABLE (KeyCol int); 

INSERT @m VALUES (1, 'aa'), (2, 'bb'), (3, 'cc'); 

-- No values in #subset 
SELECT 
    * 
FROM 
    @m M 
WHERE 
    NOT EXISTS (SELECT * FROM @s S WHERE M.KeyCol <> S.KeyCol); 

INSERT @s VALUES (2); 

-- A matching value in #subset 
SELECT 
    * 
FROM 
    @m M 
WHERE 
    NOT EXISTS (SELECT * FROM @s S WHERE M.KeyCol <> S.KeyCol); 

물론 상관 관계가있는 EXISTS WHERE 절이 여러 열로 확장 될 수 있습니다 (단 하나의 열만있는 IN 절과 달리)