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

如何将表B的trait字段聚合为CSV字段关联到表A?

如何将关联表字段聚合为CSV格式并关联主表

给定两张关联表:

表A(主表)

pk name
1  Peter
2  Jon

表B(关联表,通过fk_A关联表A的pk)

pk trait    fk_A
1  funny    1
2  generous 1
3  rude     2

期望生成的结果集:

pk name traits
1  Peter funny,generous
2  Jon   rude

核心需求是将表B中同一fk_A对应的trait字段聚合为逗号分隔的字符串,作为traits字段关联到表A。以下是不同数据库引擎的实现方案:

不同数据库的实现代码

MySQL/MariaDB

使用GROUP_CONCAT函数完成字符串聚合,配合分组查询:

SELECT 
    a.pk,
    a.name,
    GROUP_CONCAT(b.trait SEPARATOR ',') AS traits
FROM 表A a
LEFT JOIN 表B b ON a.pk = b.fk_A
GROUP BY a.pk, a.name;

若需对聚合字段去重,可改为 GROUP_CONCAT(DISTINCT b.trait SEPARATOR ',')

PostgreSQL

使用STRING_AGG函数,支持指定排序顺序:

SELECT 
    a.pk,
    a.name,
    STRING_AGG(b.trait, ',' ORDER BY b.trait) AS traits
FROM 表A a
LEFT JOIN 表B b ON a.pk = b.fk_A
GROUP BY a.pk, a.name;

SQL Server(2017及以上版本)

使用STRING_AGG函数,通过WITHIN GROUP指定排序:

SELECT 
    a.pk,
    a.name,
    STRING_AGG(b.trait, ',') WITHIN GROUP (ORDER BY b.trait) AS traits
FROM 表A a
LEFT JOIN 表B b ON a.pk = b.fk_A
GROUP BY a.pk, a.name;

Oracle(11g及以上版本)

使用LISTAGG函数实现聚合:

SELECT 
    a.pk,
    a.name,
    LISTAGG(b.trait, ',') WITHIN GROUP (ORDER BY b.trait) AS traits
FROM 表A a
LEFT JOIN 表B b ON a.pk = b.fk_A
GROUP BY a.pk, a.name;

内容的提问来源于stack exchange,提问作者R-obert

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 09:15:23