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

如何查询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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 21:15:36