Sql server 具有空子集的Tsql IN子句

Sql server 具有空子集的Tsql IN子句,sql-server,tsql,dbnull,in-subquery,Sql Server,Tsql,Dbnull,In Subquery,是否可以设置也与空子集匹配的IN语句 这是我的疑问: .. WHERE id IN (SELECT * FROM #subset) 如果子集为空,我也希望该记录。 解决办法是: .. WHERE NOT EXISTS(SELECT * FROM #subset) OR id IN (SELECT * FROM #subset) 然而,SELECT*FROM子集并不是一个简单的查询,我想知道是否有一种聪明的方法可以将IN也用于空子集。使用双负表达式 而不是 存在匹配行的位置 。。这是 其中不存

是否可以设置也与空子集匹配的IN语句

这是我的疑问:

.. WHERE id IN (SELECT * FROM #subset)
如果子集为空,我也希望该记录。 解决办法是:

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

然而,SELECT*FROM子集并不是一个简单的查询,我想知道是否有一种聪明的方法可以将IN也用于空子集。

使用双负表达式

而不是

存在匹配行的位置

。。这是

其中不存在不匹配的行


当然,correlated EXISTS WHERE子句可以扩展到多个列,而IN子句只需要一列

如何准备子集?如图所示的临时表?或者是查询的简写?
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);