假设我有一个结合 AND 和 OR 条件且不带括号的查询:
SELECT * FROM tbl1
WHERE a = 1 AND b = 2 OR c = 3;
PostgreSQL 如何评估这些条件?如(a = 1 AND b = 2) OR c = 3
或a = 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
关于postgresql - PostgreSQL 中 AND/OR 组合条件的求值顺序是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57805644/