如何查询member组用户及其所属其他用户组(group_concat聚合)
解决方案:获取属于"member"组的用户及其他所属组列表
方法一:先筛选member组用户,再聚合其他组
先通过子查询锁定所有属于"member"组的用户ID,再关联这些用户的所有用户组记录,排除"member"组后聚合剩余组名:
SELECT u.userId, GROUP_CONCAT(DISTINCT ug.name SEPARATOR ', ') AS other_groups FROM User_ u JOIN Users_UserGroups uug ON u.userId = uug.userId JOIN UserGroup ug ON uug.userGroupId = ug.userGroupId WHERE u.userId IN ( SELECT DISTINCT u_inner.userId FROM User_ u_inner JOIN Users_UserGroups uug_inner ON u_inner.userId = uug_inner.userId JOIN UserGroup ug_inner ON uug_inner.userGroupId = ug_inner.userGroupId WHERE ug_inner.name = 'member' ) AND ug.name != 'member' GROUP BY u.userId;
方法二:全量关联后用HAVING筛选目标用户
先关联所有用户的所有组记录,分组后通过HAVING判断该用户是否属于"member"组,同时用CASE在聚合时排除"member"组:
SELECT u.userId, GROUP_CONCAT(CASE WHEN ug.name != 'member' THEN ug.name END SEPARATOR ', ') AS other_groups FROM User_ u JOIN Users_UserGroups uug ON u.userId = uug.userId JOIN UserGroup ug ON uug.userGroupId = ug.userGroupId GROUP BY u.userId HAVING SUM(CASE WHEN ug.name = 'member' THEN 1 ELSE 0 END) > 0;
原代码问题说明
你原来的SQL直接通过WHERE group_.name="member"过滤了记录,导致只能获取到用户与"member"组的关联数据,无法拿到用户所属的其他组信息。上述两种方法都先确保用户属于"member"组,再收集并聚合他们的其他组。
内容的提问来源于stack exchange,提问作者user9718914
相关产品推荐
相关产品推荐

