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

如何关联所有者与共有人表 同列逗号分隔聚合展示共有人

你需要实现按所有者分组后,将关联的共有人姓名用英文逗号拼接聚合的需求,这类字符串聚合操作属于数据库方言功能,不同数据库的实现函数有差异,以下是主流数据库的可直接运行的写法,执行后可完全匹配你给出的期望输出:

各数据库实现代码

MySQL / MariaDB

使用GROUP_CONCAT函数完成聚合,默认分隔符为英文逗号,可通过SEPARATOR手动指定:

SELECT 
  o.OwnerId AS Id,
  o.owners_Name,
  GROUP_CONCAT(c.`Co-OwnerName` ORDER BY c.id SEPARATOR ',') AS `Co-owners_Name`
FROM Owners o
LEFT JOIN `Co-Owners` c 
  ON o.OwnerId = c.OwnerId
GROUP BY o.OwnerId, o.owners_Name;

注意事项:

  • 若需对共有人去重,可在函数内加DISTINCT关键字:GROUP_CONCAT(DISTINCT c.Co-OwnerName ...)
  • MySQL默认限制GROUP_CONCAT返回结果最大长度为1024字节,共有人数据量大时可调整group_concat_max_len参数避免内容截断

PostgreSQL / SQL Server 2017及以上版本

支持SQL标准的STRING_AGG聚合函数:

-- PostgreSQL 写法
SELECT 
  o.OwnerId AS Id,
  o.owners_Name,
  STRING_AGG(c."Co-OwnerName", ',' ORDER BY c.id) AS "Co-owners_Name"
FROM Owners o
LEFT JOIN "Co-Owners" c 
  ON o.OwnerId = c.OwnerId
GROUP BY o.OwnerId, o.owners_Name;
-- SQL Server 写法
SELECT 
  o.OwnerId AS Id,
  o.owners_Name,
  STRING_AGG(c.[Co-OwnerName], ',') WITHIN GROUP (ORDER BY c.id) AS [Co-owners_Name]
FROM Owners o
LEFT JOIN [Co-Owners] c 
  ON o.OwnerId = c.OwnerId
GROUP BY o.OwnerId, o.owners_Name;

Oracle 11g及以上版本

使用LISTAGG函数实现拼接:

SELECT 
  o.OwnerId AS Id,
  o.owners_Name,
  LISTAGG(c."Co-OwnerName", ',') WITHIN GROUP (ORDER BY c.id) AS "Co-owners_Name"
FROM Owners o
LEFT JOIN "Co-Owners" c 
  ON o.OwnerId = c.OwnerId
GROUP BY o.OwnerId, o.owners_Name;

Oracle 12cR2及以上版本可添加ON OVERFLOW TRUNCATE子句,避免拼接结果超长时报错

逻辑说明

  • 关联时使用LEFT JOIN可保证没有对应共有人的所有者也会出现在结果中,若仅需要存在共有人的所有者,替换为INNER JOIN即可
  • 分组维度选择OwnerId+owners_Name,符合数据库ONLY_FULL_GROUP_BY模式的语法要求
  • 语句执行后返回结果与示例完全一致:
Idowners_NameCo-owners_Name
1deepakabc,xyz,efd
2rajadef,aye

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 18:24:41