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

PostgreSQL 13如何基于JSONB字符串数组关联两张表?

PostgreSQL 13:JSONB字符串数组关联表生成活动名称列表

你可以通过展开JSONB数组 + 表关联 + 字符串聚合的方式实现需求,具体SQL如下:

SELECT
    c.客户ID,
    c.姓名,
    STRING_AGG(a.活动名称, ', ' ORDER BY idx) AS 活动名称列表
FROM
    客户表 c
JOIN LATERAL (
    -- 展开JSONB数组,同时保留原数组中的顺序
    SELECT
        jsonb_array_elements_text(c.活动列表) AS 标识符,
        row_number() OVER () AS idx
) arr ON true
JOIN 活动表 a ON arr.标识符 = a.标识符
GROUP BY
    c.客户ID, c.姓名
ORDER BY
    c.客户ID;

关键逻辑说明:

  • jsonb_array_elements_text(c.活动列表):将JSONB类型的字符串数组拆分为单行文本值,每个活动标识符对应一行数据。
  • LATERAL:让子查询可以引用主查询的客户表数据,实现每个客户的数组行与客户数据的关联。
  • STRING_AGG(a.活动名称, ', ' ORDER BY idx):把关联到的活动名称按原数组的顺序拼接成逗号分隔的字符串,ORDER BY idx确保结果顺序和原数组一致。

执行后将得到期望结果:

客户ID姓名活动名称列表
1JohnAlpha, Bravo, Charlie
2MickDelta, Echo, Charlie

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 01:30:21