【问题标题】:SQLITE3 2 level join with aggreation on middle levelSQLITE3 2 级连接与中级聚合
【发布时间】:2010-01-21 20:28:31
【问题描述】:

我们有 3 张桌子:祖父、父亲、儿子。 祖父有很多父亲,父亲有很多儿子,通过外键祖父 ID 和父亲 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;

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

谢谢

【问题讨论】:

  • 您在该代码示例中没有遗漏 GROUP BY 子句吗?
  • 为什么你(某人)否决了这个问题?我认为它表达得很好,而且中肯。如果您认为这太简单了,那是您的问题,我不知道答案,这对我很有帮助。

标签: sql database join sqlite


【解决方案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;

【讨论】:

    猜你喜欢
    • 2021-03-31
    • 2019-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-17
    • 1970-01-01
    相关资源
    最近更新 更多