所以我有以下数据库结构
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
但问题是:如果该人不属于任何群组,则该查询不会返回该人!
任何人将不胜感激!
答案 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;
如果您不知道外连接是什么,那么这就是使用正确的显式语法的更多理由,因此您可以学习。