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

如何将整数ID数组映射为对应名称拼接的单个字符串(PostgreSQL场景)

实现方案(PostgreSQL环境)

你可以通过unnest搭配WITH ORDINALITY保留ID的原始顺序,再关联名称表后拼接即可,完整查询如下:

SELECT 
    g.id,
    string_agg(n.name, ';' ORDER BY t.ord) AS single_text
FROM group_names g
CROSS JOIN unnest(string_to_array(g.group_of_names, ',')::int[]) WITH ORDINALITY AS t(name_id, ord)
INNER JOIN names n ON n.id = t.name_id
GROUP BY g.id
ORDER BY g.id;

逻辑说明

  1. unnest(数组) WITH ORDINALITY:将你转换好的ID数组拆分为多行,同时返回每个元素在原数组中的序号ord,确保后续拼接时顺序和原始逗号分隔的ID顺序完全一致
  2. CROSS JOIN:为group_names表的每一行,生成对应拆分后的多条ID记录
  3. 关联names表匹配每个ID对应的名称
  4. string_agg聚合函数:按ord字段排序后,将多个名称用分号拼接为单个字符串

可选兼容逻辑

如果group_of_names里可能存在names表中没有的ID,可以把INNER JOIN改为LEFT JOIN,搭配COALESCE处理缺失值:

SELECT 
    g.id,
    string_agg(COALESCE(n.name, '未知'), ';' ORDER BY t.ord) AS single_text
FROM group_names g
CROSS JOIN unnest(string_to_array(g.group_of_names, ',')::int[]) WITH ORDINALITY AS t(name_id, ord)
LEFT JOIN names n ON n.id = t.name_id
GROUP BY g.id
ORDER BY g.id;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 03:15:09