2010-03-08 59 views
4
加入

我有以下问题: 我有两个表:(简体)GROUP_CONCAT上的空白在MySQL

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

和M:在它们之间

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

我需要N的关系创建一个视图,该视图选择我:用户,并在一列中显示他的所有角色(这由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; 

然而,这适用于与一些定义角色的用户。没有角色的用户不会被返回。如何修改语句,以在用户没有任何角色时返回角色列中的空字符串的用户?

说明:我将SQL数据直接传递给一个网格,然后格式化为自己,对于我来说,创建缓慢且复杂的视图比在我的代码中格式化要容易。

我使用MySQL

回答

5

我试试你的SQL并没有PB来运行它,所有的行返回即使用户没有角色,你有空到角色列的唯一的事情,以避免当字段为NULL时,使用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; 
+1

现在我看起来像一个完整的白痴:-)我使用的第二个连接是内在的,但在所以我写了它的权利。感谢合并,通过。 – nothrow 2010-03-08 10:35:57