【问题标题】:Confusion over "p OR q", "p AND q", where "p" equal to "false", "q" equal to "unknown"对“p OR q”、“p AND q”的混淆,其中“p”等于“false”,“q”等于“unknown”
【发布时间】:2017-03-14 04:20:48
【问题描述】:

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

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

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

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

谁能告诉我我是对还是错?

【问题讨论】:

    标签: mysql sql tsql


    【解决方案1】:

    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 可能代表的内容(即 TRUEFALSE),整个表达式的值会发生变化。

    【讨论】:

    • 非常感谢您的澄清。现在一切都说得通了! 'NULL' 必须是 sql 中最令人困惑的部分之一。很高兴有像您这样的专家来帮忙!再次感谢!
    • @TonyStark 如果您来自 Java 或 .NET 背景,这尤其令人困惑,因为 null 有不同的行为。
    • @TimBiegeleisen 不了解 Java,但在 C# 中为 nullable bool (bool?) 为 |& 操作实现相同的逻辑。
    猜你喜欢
    • 1970-01-01
    • 2017-09-03
    • 2014-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多