MySql查询加入3个表并分组1

时间:2017-07-01 17:48:10

标签: mysql sql database group-concat

所以我有以下数据库结构

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

但问题是:如果该人不属于任何群组,则该查询不会返回该人!

任何人将不胜感激!

1 个答案:

答案 0 :(得分:1)

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

这正是你的问题。当您在FROM子句中编写多个表时,您应该考虑“我需要什么类型的JOIN”。如果你有这种想法,你会立即意识到你需要一个外部联接来做你想做的事情:

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;

如果您不知道外连接是什么,那么这就是使用正确的显式语法的更多理由,因此您可以学习。