postgresql - 在 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 = 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
推荐阅读
- r - R中具有多个条件的不同时间窗口的累积和
- c - 我将如何在C中将数字乘以-1?
- twitter-bootstrap - 如何使具有不同高度的引导 3 列弯曲?
- postgresql - Ubuntu 服务器无法运行 PostgreSQL
- shopify - Shopify Python 从 .scss.liquid 文件中以 CSS 形式获取主题资产
- html - 如何将共享按钮对齐一点?
- java - 如何使用 Java 9+ 从 Process 获取 pid 而没有非法访问警告?
- redis - used_memory_peak_perc 和 used_memory_dataset_perc 是什么意思?
- computer-vision - 多视角立体软件推荐
- sql - 如何旋转表格的几列并获得所需格式的结果。?