2012-01-15 64 views
0

我有,我想所有的值的用戶表,所以我有這個疑問:Mysql的組Concat的加入

SELECT tbl_user.* FROM tbl_user 

現在,我想在這個結果,顯示該用戶的所有角色一個附加列,(或者如果用戶沒有任何角色,則不需要)。角色信息來自兩個附加表。

第一個表包含以下兩個值:userid,roleid 第二個表包含roleid和role_name。

所以羣組concat需要根據table1中的roleid獲取所有角色名稱。

我嘗試了幾種不同的方法來做到這一點,但我沒有成功。要麼我得到的結果只有幾個相同的角色名,或者根本沒有結果。

感謝您的幫助

邁克爾

回答

2

更新:對於沒有角色的用戶添加LEFT JOIN

SELECT 
    tbl_user.*, 
    GROUP_CONCAT(role_name) AS roles 
FROM 
    tbl_user LEFT JOIN tbl_roles ON tbl_user.userid = tbl_roles.userid 
    JOIN tbl_rolenames ON tbl_roles.roleid = tbl_rolenames.roleid 
GROUP BY tbl_user.userid 

注意,MySQL將允許GROUP BY上比出現在SELECT列表中總的列數較少,但在其他RDBMS,你需要明確的列出了在tbl_user列,包括他們在GROUP BY,或做對tbl_user進行額外的自我連接以獲取該表中的剩餘列。

喜歡的東西:

SELECT 
    urole.userid, 
    uall.username, 
    uall.name, 
    uall.othercols, 
    urole.roles 
FROM 
    tbl_user uall JOIN (
    SELECT 
    tbl_user.userid, 
    GROUP_CONCAT(role_name) AS roles 
    FROM 
    tbl_user LEFT JOIN tbl_roles ON tbl_user.userid = tbl_roles.roleid 
    JOIN tbl_rolenames ON tbl_roles.roleid = tbl_rolenames.roleid 
    GROUP BY tbl_user.userid 
) urole ON uall.userid = urole.userid 
+0

@邁克爾·弗雷我已經更新,它與一個'LEFT JOIN'來解決這個問題。 – 2012-01-15 18:54:43

+0

剛剛嘗試了左連接版本,但它仍然只返回那些分配了角色的用戶。 (現在嘗試第二種選擇) – 2012-01-15 18:58:35

+0

你能解釋第8行上的uall是什麼/意思嗎?這是加入(選擇)結果的名稱嗎? – 2012-01-15 19:04:32