postgreSQL:"condition is not true"模式作为"is null or not (condition)"的替代品



在SQL中(特别是Postgres(:

foo为空的情况下where not foo='bar'子句的计算结果为某种null,导致该行不包含在结果中。

另一方面,foo为 null 的子句where (foo='bar') is not true计算结果为 true(该行包含在结果中(。

那么使用(foo='bar') is not true等同于foo is null or not foo='bar'吗?

人们似乎不是出于某种原因使用这种模式,我错过了什么吗?

那么使用(foo='bar') is not true等同于foo is null or not foo='bar'吗?

是的。或者更简单:

foo IS NULL OR foo <> 'bar'

或者更简单:

foo IS DISTINCT FROM 'bar'

使用后者。
手册章节比较函数和运算符中的详细信息。
相关:

  • 检查"空值或空值"的最佳方法

这个怎么样?

where coalesce(foo, 'foo') <> 'bar'

where not coalesce(foo, 'foo') = 'bar'

我怀疑人们正在避免IS NOT TRUE因为它在Oracle和MS SQL Server中不起作用。 使用MS SQL Server的人将避免使用ISNULL功能的原因相同。

对评论的回应:

我不知道你说的不可能的"foo"是什么意思。 你的意思是不可能的值吗? 不对。 它只需要不是"酒吧"。这仍然有效:

declare @foo varchar(15)
declare @bar varchar(15)
set @bar = 'bar'
--set @foo = 'bar'
--set @foo = 'asdf'
select 7
where coalesce( @foo, 'not' + @bar) <> @bar

相关内容

  • 没有找到相关文章

最新更新