混淆“p OR q”,“p AND q”,其中“p”等于“false”,“q”等于“unknown”

时间:2017-03-14 04:20:48

标签: mysql sql tsql

我在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”等于“未知”。但结果不应该是“未知”吗?

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

1 个答案:

答案 0 :(得分:4)

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

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

然而,在FALSE AND NULL的情况下,我们可以说出结果会是什么。在此处,由于FALSE任何必须为FALSE,因此结果必须为FALSE,即使AND另一侧的值为NULL }是TRUE AND NULL

在此之后,NULL必须为NULL,因为取决于TRUE可能代表的内容(即FALSE或{{1}})整体表达会改变。