首页 > 解决方案 > 在 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。

标签: postgresql

解决方案


AND强于OR,所以:

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

演示:db<>小提琴

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

推荐阅读