与可以为NULL的值进行比较

时间:2016-02-24 11:27:00

标签: postgresql

以下表达式

SELECT * FROM t
WHERE a = (SELECT MAX(a) FROM s)
当子查询返回NULL时,

不返回任何内容 - 即使t.a中存在NULL。

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

有干净的方法吗?

1 个答案:

答案 0 :(得分:4)

表达式x IS NOT DISTINCT FROM y相当于(x = y) OR (x IS NULL AND y IS NULL)。所以:

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