双加入MySQL的组CONCAT(Mysql group concat on double join

2019-10-30 15:10发布

我有我想要的所有值的用户表,所以我有这个疑问:

SELECT tbl_user.* FROM tbl_user

现在,我想在这个结果一个附加列,显示该用户的所有角色,(或者什么,如果有该用户的角色)。 角色信息来自两个附加表。

第一表包含这两个值:用户ID,角色ID第二个表包含角色ID和ROLE_NAME。

所以CONCAT需要组得到一个基于角色ID的table1中所有的角色名。

我曾尝试几种不同的方式来做到这一点,但我没有成功。 无论是我得到的结果只有一个有几次相同的角色名,或者没有结果的。

谢谢你的帮助

迈克尔

Answer 1:

更新:增加了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


文章来源: Mysql group concat on double join