>假设我有一个不带括号的 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