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

PostgreSQL:查询clients表中嵌套数组含指定sub_id的记录

PostgreSQL 查找JSONB数组包含指定值的条目

你的原查询存在几个问题:

  • c.configs->'pos_link'返回的是JSON对象而非数组,用jsonb_array_elements解析会直接报错
  • WHERE子句里的sub_id和别名sub_ids不匹配
  • 即使修正别名,原写法会将数组元素拆分为多行返回,导致结果重复

下面是几种正确的实现方式:

方法1:使用JSONB包含操作符@>(推荐,性能最优)

这是最简洁高效的写法,适合给configs列创建GIN索引的场景:

SELECT *
FROM clients
WHERE configs->'pos_link'->'sub_ids' @> '["00124"]'::jsonb;

@>操作符会直接检查左侧的JSONB数组是否包含右侧的单元素数组,无需展开数组,执行效率最高。

方法2:展开数组后过滤(适合需处理数组元素的场景)

如果需要同时对数组元素做额外处理,可以展开数组后匹配,用DISTINCT避免结果重复:

SELECT DISTINCT c.*
FROM clients c
JOIN jsonb_array_elements(c.configs->'pos_link'->'sub_ids') AS sub_id
ON sub_id = '"00124"'::jsonb;

方法3:使用jsonb_exists函数

用专门的数组存在性检查函数,语义更直观:

SELECT *
FROM clients
WHERE jsonb_exists(configs->'pos_link'->'sub_ids', '00124');

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 04:40:27