有很多解释为什么 NOT IN NULL 不起作用,但我没有看到任何解决方案。(这里最近的问题:为什么 NOT IN 与包含 NULL 的集合总是返回 FALSE/NULL?)
我有 6 个存储过程的可选参数,用于过滤查询的某个值。以前的开发人员做了这样的事情:
IF @var1 IS NULL AND .....
select ...
else
select ...
where value in (@var1, ...)
我不是特别喜欢这个。(查询非常庞大),所以我决定选择这样的东西:(
无论如何我们在临时表中都有结果)
IF @var IS NOT NULL OR ...
delete from #temp where value not in (@var1,...)
但我意识到这行不通。
我唯一能想到的就是创建另一个临时表,该表将仅保存@var1 等中的非空值(使用 if 语句或删除 where is NULL),然后在此表上执行连接删除。
有没有更好的办法?
不了解 Sybase,但在 SQL Server 中您可以这样做。
如果您不能使用
values
来创建派生表,则可以union all
改用。这应该是一样的。
你自己已经想出了什么:
或者
调整
ISNULL(@val,'whatever_really_not_exists')
.为了更好地理解
NULLs
,我建议阅读 Sybase 文档或Robert Vollman 的一篇关于
NULLs
.