Mr *_*ubs 20 sql postgresql comparison null
我对以下原因的理由感到困惑:
SELECT * FROM table WHERE avalue is null
Run Code Online (Sandbox Code Playgroud)
返回'avalue'为空的x行数
SELECT * FROM table WHERE avalue <> true
Run Code Online (Sandbox Code Playgroud)
难道不是其中"安勤为空返回行.
我的推理(似乎是不正确的)是因为它null是一个唯一值(它甚至不等于null)意味着它应该在结果集中显示,因为它不等于true任何一个.
我想你可以争辩说,column <> value你说你暗示该列有一个值因此null完全忽略了这些值.
这背后的原因是什么,这在其他常见的SQL DB中是一样的吗?
我的推理(假设)告诉我这是违反直觉的,我想知道为什么.
Erw*_*ter 34
每一个体面的RDBMS都以相同的方式完成它,因为它是正确的.
我在这里引用Postgres手册:
当任一输入为空时,普通比较运算符产生null(表示"未知"),而不是true或false.例如,
7 = NULL产生null,就像7 <> NULL.如果此行为不合适,请使用以下IS [ NOT ] DISTINCT FROM构造:Run Code Online (Sandbox Code Playgroud)expression IS DISTINCT FROM expression expression IS NOT DISTINCT FROM expression
请注意,这些表达式的执行速度比简单expression <> expression比较慢.
对于boolean价值观,也更简单IS NOT [TRUE | FALSE].
要获得您在第二个查询中的预期,请写:
SELECT * FROM table WHERE avalue IS NOT TRUE;Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12257 次 |
| 最近记录: |