postgresql - Postgres 在哪里被忽略?
问题描述
我试图在 Postgres 中链接多个 WHERE AND 语句,但似乎它们被忽略了。
我的查询是
SELECT id, title, tags, selected_preview_image, items, uid
FROM fb_designs r, json_array_elements(r.items#>'{listings}') obj
WHERE obj->>'active' = 'false' OR obj->>'active' = 'true'
AND title LIKE '%hoot%'
AND tags @> '{"123"}'
GROUP BY id
但是,正如您在下面的输出中看到的那样,它忽略了标题和标签查询
任何人都可以帮忙吗?
解决方案
用括号括住OR
ed 条件
WHERE
(obj->>'active' = 'false' OR obj->>'active' = 'true')
AND title LIKE '%hoot%'
AND tags @> '{"123"}'
或者更好的是,使用IN
:
WHERE
obj->>'active' IN ('false', 'true')
AND title LIKE '%hoot%'
AND tags @> '{"123"}'
理由:OR
优先级低于AND
。
所以这:
obj->>'active' = 'false'
OR obj->>'active' = 'true'
AND title LIKE '%hoot%'
AND tags @> '{"123"}'
实际上相当于:
obj->>'active' = 'false'
OR (
obj->>'active' = 'true'
AND title LIKE '%hoot%'
AND tags @> '{"123"}'
)
如您所见,使用上面的表达式,任何有的记录obj->>'active' = 'false'
都会通过。
推荐阅读
- go - 如何缩小此代码并合并 if 和 else 条件
- python - 在视图中添加分页功能未在模板中显示
- amazon-web-services - 在 dynamoDB 中创建具有可转移项目的库存系统
- arrays - 第一次单击 vuetify v-chip-group v-chip 时的“未定义”值
- node.js - 如何根据配置变量在库中定义全局变量的类型?
- django - 有没有办法在一个进程中运行多个并发的 Django 应用程序(不同的设置,相同的代码)?
- python-3.x - 类型错误:insert_results() 缺少 1 个必需的位置参数:'ergebnisse'
- python - 单击按钮后更改 Pyglet 窗口的内容
- angular - 嵌套过滤器不起作用
- compilation - 编译/配置时如何指定额外的 include 和 lib 目录?(回复:自动配置/配置)