在 SQL 的设计中这样做的基本原理是什么(在 postgres 中评估,但似乎在所有版本中都相同:
select NULL OR TRUE --> True
select NULL OR FALSE --> NULL (expected false, but is NULL)
最佳答案
NULL
表示您不知道该值是什么。这可能是真的,也可能是假的。我们还不知道。
NULL OR False
在这里更容易。此表达式此时显然不能计算为 True
。另一方面,它也不一定是 False
。我们还没有足够的信息来解决整个表达式,因此 NULL
是唯一有意义的结果。
NULL OR TRUE
另一方面,确实提供了足够的信息来求解整个表达式。对于 OR
条件,如果任何一方为真,则逻辑上整个结果为真;对方做什么并不重要。即使该 NULL
最终证明是 False
,表达式结果仍然计算为 True
。您无法对 NULL
做任何事情来使该表达式变为 False
。
并且,为了清楚起见,还值得查看 NULL AND TRUE
和 NULL AND FALSE
。前者也将评估为 NULL
,因为,同样,我们还没有足够的信息来完全解决表达式,而后者将评估为 False
,因为没有无论 NULL
如何计算,表达式都不会变为 True
。
如果你真的想搞糊涂,想想当你进行 NULL = NULL
相等比较时会发生什么。真正的结果是我们还不知道 (NULL),但是如果你强行发出这个问题,数据库会将表达式计算为 False:NULL 不等于自身。
关于sql - NULL bool 表达式设计的合理性是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44662166/