postgresql - PostgreSQL 中 AND/OR 组合条件的求值顺序是什么?

标签 postgresql

假设我有一个结合 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。

最佳答案

ANDOR 更强,因此:

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

demo:db<>fiddle

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

关于postgresql - PostgreSQL 中 AND/OR 组合条件的求值顺序是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57805644/

相关文章:

mysql - 如何在我的数据库中查询字段的时间戳值是最新的所有行?

sql - 在postgresql中按经纬度查找最近的位置

postgresql - 标签中的最大字符数(表名、列等)

postgresql - 选择日期字段在给定月份和年份中的行

postgresql - DBeaver,从数据库 Postgres 导出,表结构(属性)到文件 .txt

django - 我应该在 Django 数据库引擎中使用哪个 Postgres 值?

sql - 加快嵌套在 jsonb 对象数组中的键值的范围测试

c# - 使用 Entity Framework Core、npgsql、PostgreSQL 创建新数据库

新列的 Postgresql 更新缓慢

javascript - 将sql查询解析为JSON