求助: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
相关产品推荐
相关产品推荐

