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

Oracle数据库:将逗号分隔ID字段转换为逗号分隔名称字段

逗号分隔组ID转对应组名称的实现方案

核心思路是先拆分逗号分隔的ID为多行,关联UGM表匹配名称,再重新聚合为逗号分隔的名称字符串。以下是主流数据库的具体实现:

MySQL 8.0+

假设UAC表字段为user_id、group_ids(格式如'1, 2, 3'),UGM表字段为id、group_name:

SELECT 
    u.user_id,
    GROUP_CONCAT(g.group_name SEPARATOR ', ') AS group_names
FROM UAC u
JOIN JSON_TABLE(
    -- 把逗号分隔ID转为JSON数组格式
    CONCAT('["', REPLACE(u.group_ids, ', ', '","'), '"]'),
    '$[*]' COLUMNS(group_id INT PATH '$')
) j
JOIN UGM g ON j.group_id = g.id
GROUP BY u.user_id;

如果group_ids无空格(如'1,2,3'),将REPLACE里的', '改为','即可。

SQL Server 2017+

利用STRING_SPLIT拆分字符串,STRING_AGG聚合结果:

SELECT 
    u.user_id,
    STRING_AGG(g.group_name, ', ') AS group_names
FROM UAC u
-- 拆分逗号分隔的ID列表
CROSS APPLY STRING_SPLIT(u.group_ids, ', ') j
-- 转换拆分后的字符串为INT并关联UGM
JOIN UGM g ON TRY_CAST(j.value AS INT) = g.id
GROUP BY u.user_id;

TRY_CAST用于避免无效ID导致的查询报错,若需保留所有用户(包括ID无效的),将JOIN改为LEFT JOIN。

PostgreSQL

通过STRING_TO_ARRAY转数组,UNNEST拆分行,再聚合:

SELECT 
    u.user_id,
    STRING_AGG(g.group_name, ', ') AS group_names
FROM UAC u
-- 拆分ID列表为多行
CROSS JOIN UNNEST(STRING_TO_ARRAY(u.group_ids, ', ')) AS j(group_id)
-- 转换类型后关联UGM
JOIN UGM g ON j.group_id::INT = g.id
GROUP BY u.user_id;

注意事项

  • 确保group_ids中的ID格式统一,无多余特殊字符,避免拆分或转换失败。
  • 若需将结果写入另一张表,只需在上述SQL外层套INSERT INTO target_table(user_id, group_names) (...)即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 03:22:15