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

如何解析分号分隔列表关联另一张表后重新拼接为新字段

需求实现方案

该需求完全可实现,核心逻辑为「拆分分号分隔字段为单行→关联映射表匹配取值→按原始主键分组拼接为新字段」,主流数据库均有内置函数支持该逻辑,以下是常见场景的实现示例:


MySQL 8.0+ 实现

借助JSON_TABLE拆分多值字段,GROUP_CONCAT完成拼接:

SELECT 
  a.id,
  a.pfd_code,
  GROUP_CONCAT(b.pfd_name ORDER BY b.pfd_code SEPARATOR ';') AS pfd_name
FROM table_a a
JOIN JSON_TABLE(
  CONCAT('["', REPLACE(a.pfd_code, ';', '","'), '"]'),
  '$[*]' COLUMNS(split_code VARCHAR(100) PATH '$')
) AS t
LEFT JOIN table_b b ON t.split_code = b.pfd_code
GROUP BY a.id, a.pfd_code;

PostgreSQL 实现

借助UNNEST+STRING_TO_ARRAY拆分,STRING_AGG完成拼接:

SELECT 
  a.id,
  a.pfd_code,
  STRING_AGG(b.pfd_name, ';' ORDER BY b.pfd_code) AS pfd_name
FROM table_a a,
UNNEST(STRING_TO_ARRAY(a.pfd_code, ';')) AS t(split_code)
LEFT JOIN table_b b ON t.split_code = b.pfd_code
GROUP BY a.id, a.pfd_code;

Hive/Spark SQL 实现(大数据场景)

借助LATERAL VIEW EXPLODE拆分,CONCAT_WS+COLLECT_LIST完成拼接:

SELECT 
  a.id,
  a.pfd_code,
  CONCAT_WS(';', COLLECT_LIST(b.pfd_name)) AS pfd_name
FROM table_a a
LATERAL VIEW EXPLODE(SPLIT(a.pfd_code, ';')) t AS split_code
LEFT JOIN table_b b ON t.split_code = b.pfd_code
GROUP BY a.id, a.pfd_code;

如果使用其他类型的数据库,可查询对应数据库「行转列」「列转行」相关的内置函数,按上述逻辑调整即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 18:36:05