SQL:编写一个条件的最佳方法,该条件在变量为null时检查变量的值

时间:2012-02-15 16:37:15

标签: sql database postgresql

我正在编写一个pgplsql函数,其中我有一个变量var,可以是NULL或者是valorized。在稍后的查询中我做:

SELECT * FROM table WHERE column = var

如果是NULL var,则变为

SELECT * FROM table WHERE column = NULL

因此,查询失败并返回NULL,因为PostgreSQL documentation表示

  

空值表示未知值,并且不知道两个未知值是否相等

我用CASE声明解决了这个问题:

SELECT * FROM table WHERE 
( CASE WHEN var IS NULL THEN column IS NULL ELSE column = var END ) = TRUE

但我不确定这是解决问题的最佳方法......你有什么好的选择吗?

2 个答案:

答案 0 :(得分:5)

SELECT * FROM table WHERE column IS NOT DISTINCT FROM var

答案 1 :(得分:1)

如果var的值为NULL,您真的只想选择列值为NULL的记录吗?或者你想把它当作'全选'/'不限制'?

如果后者适用,那么这样的方法就可以了。 (这是伪代码,因为我是MSSQL的原生代码。)

SELECT * FROM table WHERE 
(var IS NULL AND column = column) OR column = var