我注意到SQL Server中有以下奇怪的行为
SELECT *
FROM Tbl
WHERE col NOT IN ((SELECT 1 WHERE 1 = 2))
返回all条记录(即,子查询结果为空集)
SELECT *
FROM Tbl
WHERE col NOT IN (1, (SELECT 1 WHERE 1 = 2))
返回no条记录(即子查询结果为空)
在使用PostgreSQL和MySQL的DBFdle中获得了相同的结果.由于额外的圆括号,Sqlite在两个查询中都不返回任何记录.
我的 idea 完全错了吗?
在documentation中找不到任何东西.
背景是我有一个将@Param
转换为@Param1, @Param2, @Param3...
的方法,其中参数的数量来自一个序列.
我希望该方法也适用于空序列,在这种情况下,我将其替换为(SELECT null WHERE 1 = 2)
,但当输入为NOT IN (1, @Param)
时,它不起作用
有什么其他的解决方案吗?
这是小提琴的代码
CREATE TABLE Tbl (col int NOT NULL);
INSERT INTO Tbl VALUES (1);
INSERT INTO Tbl VALUES (2);
我预计第二个查询将返回"2"