MySql 查询Join 3 tables and grouping 1

MySql Query Join 3 tables and grouping 1

所以我有下面的数据库结构

TABLES ------- Columns
person:       id, name, salary, address
group:        id, name    
person_group: person_id, groud_id

这是我的查询,用于获取所有人及其关联的组

SELECT p.id, p.name, 
group_concat(g.name) as groups 
FROM person_group pg, group g, person p
WHERE pg.group_id = g.id AND pg.novel_id = n.id
GROUP BY ng.person_id

所以这个查询给了我像

这样的数据
 id     name    groups
 2345   John    Admin, SuperAdmin, RedHat

但问题是:如果那个人不属于任何组,则查询不return那个人!

任何将不胜感激!

从不FROM 子句中使用逗号。 始终使用正确、明确的JOIN语法。

这正是您的问题所在。当你在 FROM 子句中写了多个 table 时,你应该想到 "what type of JOIN do I need"。如果你有这种想法,你会立即意识到你需要一个外部连接来做你想做的事:

SELECT p.id, p.name, group_concat(g.name) as groups 
FROM person p LEFT JOIN
     person_group pg
     ON pg.person_id = p.id LEFT JOIN
     group g
     ON pg.group_id = g.id 
GROUP BY p.id, p.name;

如果您不知道什么是外部联接,那么更有理由使用正确、明确的语法,以便您学习。