SQLITE3 2级连接与中间级别的聚合

时间:2010-01-21 20:28:32

标签: sql database join sqlite

我们有3张桌子:祖父,父亲,儿子。 祖父有很多父亲,父亲有很多儿子,通过祖父的关键字grandfather_id和father_id。 每条记录只有一个属性,即人名。

我想要的是拥有所有祖父的清单,每个祖父都有一个名为grandsons_names的字段,这是所有孙子名字的csv。父亲的名字不会出现在任何地方。

这是我尝试解决问题的方法:

SELECT grandfathers.*, group_concat(sons.name) 
FROM grandfathers 
    LEFT JOIN fathers ON grandfathers.id == fathers.grandfather_id 
    LEFT JOIN sons ON fathers.id == sons.father_id;

问题是..只有一个祖父出现,因为聚合发生在错误的地方..如何解决这个问题?

感谢

1 个答案:

答案 0 :(得分:1)

你有没有尝过这个?

SELECT grandfathers.*, group_concat(sons.name) 
FROM grandfathers
LEFT JOIN fathers ON grandfathers.id = fathers.grandfather_id 
LEFT JOIN sons ON fathers.id = sons.father_id
GROUP BY grandfathers.id;