gpt4 book ai didi

mysql - 跨具有 NULL 值的多个表在 MySQL 中进行 LEFT JOIN

转载 作者:可可西里 更新时间:2023-11-01 08:31:23 24 4
gpt4 key购买 nike

我有以下数据表结构

表:用户
用户名 |用户名
1 |乔
2 |玛丽

表:用户组
用户名 |群组编号
1 | 1个
1 | 2

表:组
组号 |团队名字
1 |公司1
2 |公司 2

表:角色
角色编号 |角色名称
1 |行政人员
2 |用户

表:用户角色
用户名 |角色编号
1 | 1个
2 | 1

如您所见,用户 #2 不属于任何组。角色和组是可选的,迫使我离开关节,但是当我运行如下查询时

`SELECT a.user_id,
a.user_name
GROUP_CONCAT(r.role_name) AS role_names,
GROUP_CONCAT(g.group_name) AS group_names
FROM user a
LEFT JOIN role_map m ON a.user_id = m.user_id
INNER JOIN role r ON m.role_id = r.role_id
LEFT JOIN user_group s ON a.user_id = s.user_id
INNER JOIN group g ON s.group_id = g.group_id
GROUP BY a.user_id`

我在 role_names 列中得到笛卡尔积 - 结果如下所示

乔 |管理员,管理员 |公司1、公司2

我做错了什么?

最佳答案

解决此问题的最简单方法是在 GROUP_CONCAT ( SQL Fiddle ) 中使用 DISTINCT。此外,您还需要添加 GROUP BY a.user_id 以便按用户分组:

SELECT a.user_id,
a.user_name,
GROUP_CONCAT(DISTINCT r.role_name) AS role_names,
GROUP_CONCAT(DISTINCT g.group_name) AS group_names
FROM `user` a
LEFT JOIN `user_role` m ON a.user_id = m.user_id
LEFT JOIN `role` r ON m.role_id = r.role_id
LEFT JOIN `user_group` s ON a.user_id = s.user_id
LEFT JOIN `group` g ON s.group_id = g.group_id
GROUP BY a.user_id;

关于mysql - 跨具有 NULL 值的多个表在 MySQL 中进行 LEFT JOIN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25941771/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com