MySQL:如何在WHERE比较中使用GROUP_CONCAT

问题描述 投票:0回答:1

我有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答案建议使用HAVINGWHERE,但这会产生错误。我已经尝试过JOIN,但这也不起作用。

如何将groups_users表仅过滤到user_id为2的表,然后获取那些group_id的所有成员列表?

mysql where-clause group-concat
1个回答
0
投票

您可以添加查询以过滤所需的组:

SELECT g.group_id, g.groupname
,GROUP_CONCAT(DISTINCT CONVERT(gu.user_id, CHAR(2)) ORDER BY gu.user_id) AS group_members
FROM (SELECT group_id FROM group_users WHERE user_id=2) gu1
INNER JOIN group_users gu
ON gu.group_id=gu1.group_id
INNER JOIN groups g
ON g.group_id = gu.group_id
GROUP BY gu.group_id
ORDER BY gu.group_id;
© www.soinside.com 2019 - 2024. All rights reserved.