繁体   English   中英

在MySQL中的空连接上的group_concat

[英]group_concat on an empty join in MySQL

我有以下问题:我有两个表:(简化)

+--------+    +-----------+
| User   |    | Role      |
+--------+    +-----------+
| ID<PK> |    | ID <PK>   |
+--------+    | Name      |
              +-----------+

和M:他们之间的关系

+-------------+   
| User_Role   |   
+-------------+
| User<FK>    |
| Role<FK>    |
+-------------+

我需要创建一个视图,它选择我: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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM