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;
如果您不知道什么是外部联接,那么更有理由使用正确、明确的语法,以便您学习。
所以我有下面的数据库结构
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;
如果您不知道什么是外部联接,那么更有理由使用正确、明确的语法,以便您学习。