【问题标题】:SQL order of operations for logical operands逻辑操作数的 SQL 操作顺序
【发布时间】:2018-08-22 18:05:22
【问题描述】:

我继承了一些糟糕的 SQL 代码(零文档并且我缺少原始要求)。在where子句中,它有以下内容:

A OR B AND C AND D OR E

根据我对逻辑操作数的了解,我的假设是 SQL 会将其编译为:

A OR (B AND C AND D) OR E

对吗?

我有一种感觉

(A OR B) AND C AND (D OR E)

而且我需要首先与那些提出此项目请求的人交谈,因为我还没有看到最初的要求。

【问题讨论】:

  • 您对布尔运算符优先级的理解是完全正确的:AND 比 OR 更强,就像乘法与加法一样。您对意图的猜测可能也是 100% 正确的(意味着条件写错了),但如果不询问请求项目的人,您将不会知道。
  • 如果您要添加括号,那么正确的版本应该是:(A OR ((B AND C) AND D)) OR E。这在语义上等同于您的第二个版本。
  • Documentation for condition precedence,表明你是对的,因为AND的优先级高于OR
  • @GordonLinoff - 不,您提出的版本不等同于 OP 的第二个版本。如果不知道意图(要求),就不可能知道“正确”版本是什么。

标签: sql oracle logic operand


【解决方案1】:

你是对的。在没有括号的情况下,这应解释为:

A OR (B AND C AND D) OR E

【讨论】:

    猜你喜欢
    • 2017-08-12
    • 1970-01-01
    • 2014-08-18
    • 2016-02-15
    • 1970-01-01
    • 2013-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多