mysql - 混淆 "p OR q"、 "p AND q",其中 "p"等于 "false"、 "q"等于 "unknown"

标签 mysql sql t-sql

我在Stack Overflow post上看到了下面的图表

enter image description here

但是,我对“p OR q”、“p AND q”的结果感到困惑,其中“p”等于“false”,“q”等于“unknown”。

图中,“p OR q”的结果是“未知”,其中“p”等于“假”,“q”等于“未知”。但结果不应该是“假”吗?

此外,在图中,“p AND q”的结果为“假”,其中“p”等于“假”,“q”等于“未知”。但结果不应该是“未知”吗?

有人可以告诉我我是对还是错吗?

最佳答案

NULL在SQL中具有特殊的语义含义。 NULL 表示“未知”,因此任何依赖于已知值的逻辑操作都是未知的。

FALSE OR NULL的情况下,结果是未知的,因为结果取决于NULL值实际是什么。如果 NULLTRUE,则表达式将为 TRUE,但如果为 FALSE,则表达式将为FALSE。由于它可能是 TRUEFALSE,因此我们无法确定该表达式的值是什么,结果也是 NULL

但是,在FALSE AND NULL的情况下,我们可以说出结果是什么。在这里,由于 FALSEanything 必须为 FALSE,因此结果也必须为 FALSE,即使该值AND 的另一边是 NULL

接下来,TRUE AND NULL 必须是 NULL,因为这取决于 NULL 可能代表什么(即 TRUE FALSE)整个表达式的值将会改变。

关于mysql - 混淆 "p OR q"、 "p AND q",其中 "p"等于 "false"、 "q"等于 "unknown",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42777700/

相关文章:

java - 如何用最少的时间在mysql中转换大约1600万行?

python - 如何使用 "Min()"创建 SQL Pypika 查询

mysql - SQL 计数开始 xxx 数字

将 GUID 转换为任何其他数据类型时出现 T-SQL 算术溢出错误

几何包的MySQL字符串编码

MySql:让这个查询更快......有办法吗?

mysql - Symfony2 : Doctrine: Base table or view not found: 1146 tablename is same

mysql - 使用具有多行和多列的条件更新表

SQL:过滤类型 A 事件发生后 1 秒内未发生类型 B 事件的行

sql - 用先前的 NOT NULL 行更新 NULL 行