使用GROUP_CONCAT时显示所有行与空连接结果

时间:2017-04-26 19:28:26

标签: mysql database

我在一个大型用户表上运行以下查询。

SELECT `Users`.`Username`, GROUP_CONCAT(`GroupAccess`.`UserGroup`) AS 'GroupID' 
FROM `Users` 
LEFT JOIN `GroupAccess` ON `GroupAccess`.`User` =  `Users`.`ID` 
GROUP BY `GroupAccess`.`User`

GroupAccess只是一个关系表,其中包含用户ID和他们所属的组ID。

我的结果:

Username....GroupID
Test1.............NULL
Test81.............1,13,12
Test82............1,14
Test83............2
Test84............2

但是,还有许多其他用户没有组(Test2-80),但他们没有显示。如何查询列出所有用户即使他们没有组而不是只有第一个用户?

1 个答案:

答案 0 :(得分:1)

不要按照您LEFT JOIN所使用的表格中的列进行分组。如果没有匹配项,则该列将为NULL,并且所有这些行将组合在一起。相反,请使用GROUP BY Users.ID

另一种解决方案是在子查询中进行分组。

SELECT u.Username, g.GroupIDs
FROM Users AS u
LEFT JOIN (
    SELECT User, GROUP_CONCAT(UserGroup) AS GroupIDs
    FROM GroupAccess
    GROUP BY User) AS g
ON u.ID = g.User