如何在 mysql 的 Group_concat 子查询中使用选择查询
Posted
技术标签:
【中文标题】如何在 mysql 的 Group_concat 子查询中使用选择查询【英文标题】:how to use select query in a Group_concat sub query in mysql 【发布时间】:2017-09-11 10:34:18 【问题描述】:我有 3 张桌子:
tbl_user 存储所有用户详细信息(用户 ID、姓名、地址)
user_id name address
1 a (shop) home
2 b (shop) bakerstreet
3 c (staff) wallstreet
4 d (staff) georgia
5 e (staff) sydney
tbl_user_group 存储用户类型(user_id,user_type : 1=shop_owner,2=staff)
user_id user_type
1 1
2 1
3 2
4 2
5 2
tbl_user_association 保存 shop_owner 和 staff 关系(shop_owner_id,staff_id)
shop_owner_id staff_id
1 3
1 4
1 5
2 3
2 4
想要的结果
我想显示员工列表和他们关联的各个商店,如下所示:
user_id staff_name shop_owner
3 c a,b
4 d a,b
5 e a
我尝试使用here 中提到的 group_concat。查询如下:
SELECT
u.id AS user_id,
u.name AS staff_name,
(SELECT GROUP_CONCAT(u.name separator ',') FROM tbl_user u WHERE u.id = ua.shop_owner_id) AS
shop_owner
FROM tbl_user u
JOIN tbl_user_group ug ON u.id = ug.user_id
LEFT JOIN tbl_user_association ua ON u.id = ua.staff_id
WHERE ug.user_type = 2
GROUP BY u.id
但它会返回单行五线谱,如下所示。我哪里出错了?
user_id staff_name shop_owner
3 c a
4 d a
5 e a
【问题讨论】:
用(GROUP_CONCAT(u.name separator '')) AS shop_owner
替换(SELECT GROUP_CONCAT(u.name separator ',') FROM tbl_user u WHERE u.id = ua.shop_owner_id) AS shop_owner
and in where 子句u.id = ua.shop_owner_id
【参考方案1】:
这就是我的做法:
SELECT
u.user_id,
u.name,
GROUP_CONCAT( so.name )
FROM
tbl_user_group ug
INNER JOIN tbl_user u
ON ( ug.user_id = u.user_id )
INNER JOIN tbl_user_association ua
ON ( ua.staff_id = u.user_id )
INNER JOIN tbl_user so -- here join again the user table to get shop owners names
ON ( ua.shop_owner_id = so.user_id )
WHERE
ug.user_type = 2
GROUP BY
u.user_id;
【讨论】:
以上是关于如何在 mysql 的 Group_concat 子查询中使用选择查询的主要内容,如果未能解决你的问题,请参考以下文章
当我在查询中使用“GROUP_CONCAT”和“HAVING”时如何计算 MySQL 结果?
如何仅使用“group_concat”过滤表 mysql 中的行