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

PostgreSQL 14.9:如何拆分JSONB数组并筛选指定code值输出?

PostgreSQL拆分JSONB数组并保留匹配元素的正确SQL写法

你的问题出在使用了a.*,这会直接带出原表中完整的Detail数组字段。要实现每个符合code='156'的JSONB元素单独成行,且Detail列仅保留该元素,需要调整查询的字段选择逻辑,同时利用JSONB专属的数组处理函数提升性能:

正确SQL语句

SELECT 
    a.Name,
    j AS Detail
FROM public.a_table a
CROSS JOIN LATERAL jsonb_array_elements(a.Detail) AS j
WHERE j->>'code' = '156'
ORDER BY a.Name DESC;

关键说明

  • 不再使用a.*,而是显式指定a.Name,并将匹配的数组元素j重命名为Detail,这样输出的Detail列就只会是单个符合条件的JSONB元素
  • 由于你的Detail字段类型是JSONB,直接使用jsonb_array_elements处理,无需转换成JSON类型,避免不必要的类型转换开销
  • CROSS JOIN LATERAL会将每条数据的JSONB数组拆分成单独行,再通过WHERE条件过滤出code='156'的元素

预期输出示例

NameDetail
lemon{"code": "156", "color": "green"}
lemon{"code": "156", "color": "blue"}
lemon{"code": "156", "color": "black"}
apple{"code": "156", "color": "red"}
apple{"code": "156", "color": "blue"}
orange{"code": "156", "color": "yellow"}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 12:02:27