2010-03-08 57 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