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

求助:MySQL多对多关系中按incident_id聚合用户姓名的实现

MySQL多对多关联查询:合并关联用户姓名

要实现按incident_id分组,将关联的用户姓名用&连接展示的需求,可以使用MySQL的GROUP_CONCAT()函数,结合表关联完成。

基础查询方案

仅返回存在关联用户的事件记录:

SELECT 
    iu.incident_id,
    GROUP_CONCAT(u.user_fullname SEPARATOR ' & ') AS user_fullname
FROM 
    incident_users iu
INNER JOIN 
    users u ON iu.user_id = u.user_id
GROUP BY 
    iu.incident_id;

带排序的拼接

如果需要对拼接的姓名按特定顺序排列(比如姓名首字母),可在GROUP_CONCAT中添加排序规则:

SELECT 
    iu.incident_id,
    GROUP_CONCAT(u.user_fullname ORDER BY u.user_fullname SEPARATOR ' & ') AS user_fullname
FROM 
    incident_users iu
INNER JOIN 
    users u ON iu.user_id = u.user_id
GROUP BY 
    iu.incident_id;

包含无关联用户的事件

若要展示所有事件(包括未关联任何用户的事件),使用LEFT JOIN并处理空值:

SELECT 
    i.incident_id,
    IFNULL(GROUP_CONCAT(u.user_fullname SEPARATOR ' & '), '') AS user_fullname
FROM 
    incidents i
LEFT JOIN 
    incident_users iu ON i.incident_id = iu.incident_id
LEFT JOIN 
    users u ON iu.user_id = u.user_id
GROUP BY 
    i.incident_id;

关键说明

  • GROUP_CONCAT():MySQL内置函数,用于将分组内的指定字段值拼接为单个字符串,通过SEPARATOR自定义分隔符
  • INNER JOIN:仅保留存在用户关联的事件记录
  • LEFT JOIN:保留所有事件记录,即使该事件无关联用户
  • IFNULL():当事件无关联用户时,将user_fullname设为空字符串,避免返回NULL

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 12:01:01