我有我想要的所有值的用户表,所以我有这个疑问:
SELECT tbl_user.* FROM tbl_user
现在,我想在这个结果一个附加列,显示该用户的所有角色,(或者什么,如果有该用户的角色)。 角色信息来自两个附加表。
第一表包含这两个值:用户ID,角色ID第二个表包含角色ID和ROLE_NAME。
所以CONCAT需要组得到一个基于角色ID的table1中所有的角色名。
我曾尝试几种不同的方式来做到这一点,但我没有成功。 无论是我得到的结果只有一个有几次相同的角色名,或者没有结果的。
谢谢你的帮助
迈克尔
更新:增加了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