我有以下问题:
我有两张桌子:(简化)
+--------+ +-----------+
| User | | Role |
+--------+ +-----------+
| ID | | ID |
+--------+ | Name |
+-----------+
和M:他们之间的关系
+-------------+
| User_Role |
+-------------+
| User |
| Role |
+-------------+
我需要创建一个视图,它选择我:User,并在一列中,选择他的所有角色(这是由group_concat完成的).
我试过以下:
SELECT u.*, group_concat(r.Name separator ',') as Roles FROM
User u
LEFT JOIN User_Role ur ON ur.User=u.ID
LEFT JOIN Role r ON ur.Role=r.ID
GROUP BY u.ID;
但是,这适用于具有某些已定义角色的用户.没有角色的用户不会被退回.如何修改语句,当用户没有任何角色时,在Roles列中返回带有空字符串的User?
说明:我将SQL数据直接传递给网格,然后网格自行格式化,我创建缓慢而复杂的视图比在我的代码中格式化更容易.
我正在使用MySQL
解决方法:
我已经尝试过你的SQL并且没有pb来运行它,所有行都返回甚至没有角色的用户,唯一的东西就是你没有进入角色列,以避免使用COALESCE函数获取空字符串时该字段将是空值.
SELECT u.*, group_concat(COALESCE(r.Name, "") separator ',') as Roles FROM
User u
LEFT JOIN User_Role ur ON ur.User=u.ID
LEFT JOIN Role r ON ur.Role=r.ID
GROUP BY u.ID;
标签:mysql,join,grouping
来源: https://codeday.me/bug/20190621/1258951.html