Postgresql 与可以为空的值进行比较

Postgresql 与可以为空的值进行比较,postgresql,Postgresql,下面的表达式 SELECT * FROM t WHERE a = (SELECT MAX(a) FROM s) 当子查询返回NULL时,不返回任何内容-即使t.a中存在NULL 当子查询从t返回NULL和非NULL值时,如果有任何匹配子查询,我希望从t返回NULL值 有干净的方法吗?表达式x与y没有区别相当于(x=y)或(x为NULL,y为NULL)。因此: SELECT * FROM t WHERE a IS NOT DISTINCT FROM (SELECT MAX(a) FROM s)

下面的表达式

SELECT * FROM t
WHERE a = (SELECT MAX(a) FROM s)
当子查询返回NULL时,不返回任何内容-即使
t.a
中存在NULL

当子查询从t返回NULL和非NULL值时,如果有任何匹配子查询,我希望从t返回NULL值


有干净的方法吗?

表达式
x与y没有区别
相当于
(x=y)或(x为NULL,y为NULL)
。因此:

SELECT * FROM t
WHERE a IS NOT DISTINCT FROM (SELECT MAX(a) FROM s)

从s中选择合并(最大(a),0)
尝试this@JaydipJ,我想,它不是很干净,我需要用一个我知道不在s中的值来代替0,可能根本就没有这样的值。@Evgeny so,您期望的是什么?当子查询返回NULL时,不返回任何内容-即使t.a>中有NULL,因为
不是
的比较运算符,而不是
=