我有一个用户表,我想要所有值,所以我有这个查询:
SELECT tbl_user.* FROM tbl_user
现在我想在此结果中添加一个附加列,该列显示此用户拥有的所有角色(如果用户没有角色,则不显示任何内容)。角色信息来自另外两个表格。
第一个表包含以下两个值:userid,roleid 第二个表包含roleid和role_name。
因此,group concat需要根据table1中的roleid获取所有角色名称。
我尝试了几种不同的方法来做到这一点,但我没有成功。要么我只获得一个具有相同角色名数的结果,要么根本没有结果。
感谢您的帮助
迈克尔
答案 0 :(得分: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