我正在大量用户上运行以下查询。

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),但没有显示。我如何获得查询以列出所有用户,即使他们没有组而不是仅第一个?

最佳答案

不要按与您一起使用的表中的列进行分组。如果没有匹配项,则该列将为LEFT JOIN,所有这些行都将分组在一起。而是使用NULL

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

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

10-02 01:39