【发布时间】:2020-05-06 19:28:48
【问题描述】:
我有 2 个表:groups:组名的简单列表,group_users:组及其用户的列表,例如:
group_id user_id
1 2
1 37
1 38
3 14
8 2
8 24
8 27
我有一个GROUP_CONCAT 查询当前正在运行:
SELECT g.group_id, g.groupname
,GROUP_CONCAT(DISTINCT CONVERT(gu.user_id, CHAR(2)) ORDER BY gu.user_id) AS group_members
FROM group_users gu, groups g
WHERE g.group_id = gu.group_id
GROUP BY gu.group_id
ORDER BY gu.group_id;
这会产生一个结果:
group_id groupname group_members
1 Sales 2,37,38
3 Marketing 3
8 Production 2,24,27
我的问题:我正在尝试获取特定用户 ID 所属的组列表(例如,此处,user_id 2 应该产生结果行 1 和 3)。
但是,当我更改条件 WHERE g.group_id = gu.group_id AND gu.user_id = 2 时,我得到:
group_id groupname group_members
1 Sales 2
8 Production 2
组已正确过滤,但group_members 列表仅限于所述 ID。
我看到许多 SO 答案建议使用 HAVING 与 WHERE,但这会产生错误。我试过JOINs,也不管用。
如何将groups_users 表过滤为只有user_id 为2 的表,然后获取group_ids 的所有成员的列表?
【问题讨论】:
标签: mysql sql group-by where-clause group-concat