MySQL中INNER JOIN查询时如何合并同ID角色并实现ID去重
解决方案:合并同一用户的多个角色名称
在MySQL中,你可以使用GROUP_CONCAT()聚合函数配合GROUP BY实现用户ID唯一,并将同一用户的多个角色名称合并到单个字段中。修改后的查询语句如下:
SELECT users.id, GROUP_CONCAT(roles.name SEPARATOR ', ') AS Name FROM users_roles INNER JOIN users ON users.id = users_roles.user_id INNER JOIN roles ON roles.id = users_roles.role_id GROUP BY users.id
关键说明:
GROUP BY users.id:按用户ID分组,确保每个用户仅返回一行结果GROUP_CONCAT(roles.name SEPARATOR ', '):将分组内的所有角色名称用逗号加空格拼接成字符串,SEPARATOR可自定义分隔符,默认值为逗号,显式指定更直观
执行结果:
+---------+--------------+ | ID | Name | +---------+--------------+ | 1 | Student | | 2 | Admin, LBC | | 3 | LBC | | 4 | Examinator | | 5 | PO | +---------+--------------+
原查询中的DISTINCT无法满足需求,因为它仅去除完全重复的行,但同一用户不同角色的行属于不同记录,因此仍会返回多行。通过分组+聚合函数的方式,才能真正实现用户ID唯一并合并角色的效果。
内容的提问来源于stack exchange,提问作者zweqmeister
相关产品推荐
相关产品推荐

