SQL逻辑运算符的操作顺序

3
我继承了一些糟糕的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)

我需要与最初请求此项目的人交谈,因为我还没有看到原始要求。

2
你对布尔运算符优先级的理解完全正确:AND比OR更强,就像乘法比加法更强一样。你对意图的猜测也很可能是100%正确的(这意味着条件书写不正确),但如果没有询问请求项目的人,你将无法确定。 - user5683823
1
如果你要添加括号,那么正确的版本应该是:(A OR ((B AND C) AND D)) OR E。这在语义上等同于你的第二个版本。 - Gordon Linoff
条件优先级文档,表明你是正确的,因为ANDOR具有更高的优先级。 - Alex Poole
1
@GordonLinoff - 不,您提出的版本与OP的第二个版本并不相等。而且,如果不知道意图(要求),就不可能知道“正确”的版本是什么。 - user5683823
1个回答

2

您说得对。如果没有括号,应该这样解释:

A OR (B AND C AND D) OR E

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接