Postgresql 支持两个特有的比较语句 IS DISTINCT FROM 和 IS NOT DISTINCT FROM,他们认为NULL是已知的值,而不是未知值。他们的比较和 != 不同。
看例子:
postgres=#selecta,b,aisdistinctfrombas"distinctfrom",a!=bas"!=" postgres-#from postgres-#(values(1),(2),(NULL))asa(a),postgres-#(values(1),(NULL))asb(b); a|b|distinctfrom|!= ---+---+---------------+---- 1|1|f|f 1|2|t|t 1||t| 2|1|t|t 2|2|f|f 2||t| |1|t| |2|t| ||f| (9rows)
通过例子得知:
1 is distinct from 1 返回false,1 != 1返回false。
1 is distinct from 2 返回true,1 != 1返回true。
1 is distinct from null 返回true,1 != null返回null。
null is distinct from null 返回false,null != null 返回null。