在PostgreSQL中组合AND/OR的条件的评估顺序是什么?



>假设我有一个不带括号的 AND 和 OR 条件组合的查询:

SELECT * FROM tbl1
WHERE a = 1 AND b = 2 OR c = 3;

PostgreSQL如何评估这些条件?喜欢(a = 1 AND b = 2) OR c = 3a = 1 AND (b = 2 OR c = 3).我在文档中的任何地方都找不到它。

注意:我不是故意编写这样的模棱两可的查询。我正在构建一个工具,用户可以在其中创建这样的查询。

注意2:如果有什么不同的话,我在一个实例中使用PostgreSQL 9.6,在另一个实例中使用11。

AND

OR强,所以:

a AND b OR c == (a AND b) OR c

演示:数据库<>小提琴

a  | b  | c  | a AND b OR c | (a AND b) OR c | a AND (b OR c)
:- | :- | :- | :----------- | :------------- | :-------
f  | f  | f  | f            | f              | f       
f  | f  | t  | t            | t              | f       
f  | t  | f  | f            | f              | f       
f  | t  | t  | t            | t              | f       
t  | f  | f  | f            | f              | f       
t  | f  | t  | t            | t              | t       
t  | t  | f  | t            | t              | t       
t  | t  | t  | t            | t              | t 

当然,在您的情况下,这意味着:

a = 1 AND b = 2 OR c = 3    ==    (a = 1 AND b = 2) OR c = 3

最新更新