2013-06-19 91 views
1

是否可以設置也與空子集相匹配的IN語句?具有空子集的Tsql IN子句

這是我的查詢:

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

我想這個紀錄也如#subset是空的。 一種解決方法是:

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

然而,(SELECT * FROM #subset)不是如此簡單查詢,我想知道的是有使用「IN」,也有空子集一個聰明的辦法。

+0

#subset是如何準備的?臨時表(如圖所示)?或者它是查詢的簡寫? – 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子句)