You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何查询JSONB字段值全为'0'的PostgreSQL记录(无内连接)

解决PostgreSQL JSONB字段全值为'0'的查询问题

首先你之前用的jsonb_exists完全用错了——这个函数的作用是检查JSONB中是否存在指定键名,第二个参数只能是单个键名,不能写条件表达式,所以你的语句自然无效。

针对你的需求(JSONB字段所有值都是字符串'0',键名/数量不固定),不用子查询的方案如下:

用JSON路径函数(PostgreSQL 12+)

PostgreSQL 12及以上支持JSON路径查询,直接用jsonb_path_exists就能实现,不需要子查询:

SELECT * FROM mytable
WHERE NOT jsonb_path_exists(myfield, '$.* ? (@ != "0")');
  • 路径表达式$.*匹配JSONB的所有顶层值
  • ? (@ != "0")筛选出值不等于字符串'0'的元素
  • NOT取反后,就得到所有值都是'0'的记录

低版本替代方案(如果用不了JSON路径)

如果你的PostgreSQL版本低于12,没法用上面的方法,那还是得用子查询或者横向连接,但可以换个更紧凑的写法:

SELECT m.* FROM mytable m
WHERE (SELECT bool_and(value = '0') FROM jsonb_each_text(m.myfield)) = true;

这里用bool_and聚合函数判断所有值是否都等于'0',结果为true的记录就是符合条件的。

内容的提问来源于stack exchange,提问作者Bheid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 11:06:09