mysql - 获取包含子项和子项详细信息计数的父项的 MySQL 结果

标签 mysql sql count parent-child children

所以,我有一个父表,它有子记录,同时有详细信息(3 级父表)。我需要获取 parent 姓名,以及他们各自的 child 和 children_detail COUNT。

parent

  • id_parent
  • 姓名

child

  • id_child
  • id_parent
  • 姓名

children_detail

  • id_detail
  • id_child
  • 描述

这一直有效到第二层:

SELECT parent.id_parent, parent.name,
COUNT(pos.id_pos) AS q
FROM parent
LEFT JOIN children ON children.id_parent = parent.id_parent
GROUP BY parent.id_parent ORDER BY parent.name

如何在同一个 SELECT 中也获得第三级计数?谢谢!

最佳答案

由于您的表不大,请尝试使用子查询:

SELECT parent.id_parent, parent.name,
COUNT(pos.id_pos) AS q,
(SELECT COUNT(*) FROM children_detail cd WHERE cd.id_child = children.id_child) as cdc
FROM parent
LEFT JOIN children ON children.id_parent = parent.id_parent
GROUP BY parent.id_parent ORDER BY parent.name

编辑

抱歉,下面的应该也可以:

SELECT parent.id_parent, parent.name,
  COUNT(pos.id_pos) AS q,
  COUNT(cdc.id_detail) as cdc
FROM parent
  LEFT JOIN children ON children.id_parent = parent.id_parent
  LEFT JOIN children_detail cdc on cdc.id_child = children.id_child
GROUP BY parent.id_parent, parent.name
ORDER BY parent.name

编辑2

如果一切都失败了,您可以使用两个子查询(非常糟糕的做法,但对于您的大小的表来说应该没问题):

SELECT parent.id_parent, parent.name,
  COUNT(pos.id_pos) AS q,
  (SELECT COUNT(*) FROM children_detail cd WHERE cd.id_child IN (SELECT cc.id_child FROM children cc where cc.id_parent = c.id_parent)) as cdc
FROM parent
  LEFT JOIN children c ON c.id_parent = parent.id_parent
GROUP BY parent.id_parent 
ORDER BY parent.name

关于mysql - 获取包含子项和子项详细信息计数的父项的 MySQL 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21793791/

相关文章:

mysql - 分别计算唯一日期的平均计数

MySQL:计算员工数量

mysql - Mongo 和 Mysql(MyIsam) 之间有很大的速度差异吗?

c# - 用C#无法连接MySQL数据库;错误状态: 18

java - 获取当月的天数

sql - 错误报告 - ORA-02291 : integrity constraint violated - parent key not found

mysql - 如何更新在查询本身中查询的表?

php - Javascript 或 Jquery 中两个日期之间的天数

带有 spring roo 的 Mysql 数据库

php - 将超链接插入sql数据库 - php