sql - NULL bool 表达式设计的合理性是什么

标签 sql

在 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 TRUENULL AND FALSE。前者也将评估为 NULL,因为,同样,我们还没有足够的信息来完全解决表达式,而后者将评估为 False,因为没有无论 NULL 如何计算,表达式都不会变为 True

如果你真的想搞糊涂,想想当你进行 NULL = NULL 相等比较时会发生什么。真正的结果是我们还不知道 (NULL),但是如果你强行发出这个问题,数据库会将表达式计算为 False:NULL 不等于自身。

关于sql - NULL bool 表达式设计的合理性是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44662166/

相关文章:

java - 如何以嵌入模式自动创建hsqldb

Sql 函数问题 "The last statement included within a function must be a return statement"

当 PIVOT 在 SQL Server CE 中不可用时的 SQL 等效项

mysql - 一起使用 COUNT 和 DISTINCT 关键字来计算不同值的数量

sql - 插入查询 : Why is it a bad idea to not include column names?

python - 如何将 SQL 数据框中列的单个 MIN 值作为标量返回?

mysql - Sql 查询在某些情况下返回可疑值的两倍,而在其他情况下返回正确值

sql - 删除重复记录保留原始记录

PHP 和 MySQL 外键未按预期工作

mysql - 对 MySQL 中 GROUP_CONCAT 的每个元素执行 LIKE 操作