我在Stack Overflow post上看到了下面的图表
但是,我对“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
值实际是什么。如果 NULL
为 TRUE
,则表达式将为 TRUE
,但如果为 FALSE
,则表达式将为FALSE
。由于它可能是 TRUE
或 FALSE
,因此我们无法确定该表达式的值是什么,结果也是 NULL
。
但是,在FALSE AND NULL
的情况下,我们可以说出结果是什么。在这里,由于 FALSE
和anything 必须为 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/