gpt4 book ai didi

mysql连接进行关系查找

转载 作者:行者123 更新时间:2023-11-29 13:01:06 24 4
gpt4 key购买 nike

我从来没有对常规选择查询有过如此出色的处理。我有一个新项目,其中包含 usersrolessigned_roles(具有角色的用户的查找表)。

我想对roles.name进行group_concat,以便我的结果显示每个用户分配的角色。

我尝试了几件事:

select users.id, users.displayname,users.email, rolenames from `users` 
left join `assigned_roles` on `assigned_roles`.`user_id` = `users`.`id`
left join (SELECT `id`, group_concat(`roles`.`name`) as `rolenames` FROM `roles`) as uroles ON `assigned_roles`.`role_id` = `uroles`.`id`

这为我提供了分组的角色名称,但如果用户有两个角色,则会显示重复的条目,因此结果中的第二行显示相同的用户,但没有角色名称。

select users.id, users.displayname,users.email, rolenames from `users` 
join `assigned_roles` on `assigned_roles`.`user_id` = `users`.`id`
join (SELECT `id`, group_concat(`roles`.`name`) as `rolenames` FROM `roles`) as uroles ON `assigned_roles`.`role_id` = `uroles`.`id`

只是常规加入显示了我想要的内容,但不会列出没有任何分配的用户。角色,因此它不完整。

我会继续努力,但我认为堆栈可以提供帮助,希望我今天能了解更多有关联接的知识。

谢谢。

最佳答案

要使 GROUP CONCAT 在这种情况下工作,您需要一个 GROUP BY 来获取每个用户的组信息,例如;

SELECT u.id, u.displayname, u.email, GROUP_CONCAT(r.name) rolenames 
FROM users u
LEFT JOIN assigned_roles ar ON ar.user_id = u.id
LEFT JOIN roles r ON r.id = ar.role_id
GROUP BY u.id, u.displayname, u.email

关于mysql连接进行关系查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23326026/

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