Mysql 单表上的子查询

Mysql 单表上的子查询,mysql,sql,subquery,hierarchical-data,Mysql,Sql,Subquery,Hierarchical Data,好的,我有一张桌子 Tasks -- TaskId (unique autoinc primary) ChildOf (Contains task ID of parent, or 0 if top tier (no parent)) 我需要编写一个查询来选择ChildOf=0的所有记录。。。简单对吧 好的,但还需要返回另一列,其中包含告诉每个任务有多少子任务的结果 所以结果是这样的 TaskID ... ChildOf ... countChildren 37 ......

好的,我有一张桌子

Tasks
--
TaskId  (unique autoinc primary)
ChildOf   (Contains task ID of parent, or 0 if top tier (no parent))
我需要编写一个查询来选择ChildOf=0的所有记录。。。简单对吧

好的,但还需要返回另一列,其中包含告诉每个任务有多少子任务的结果

所以结果是这样的

TaskID ...  ChildOf ... countChildren
 37   ......  0   ....    3
 42   ......  0   ....    0
 99   ......  0   ....    1 

etc.... 
我知道我需要的两个查询是这样的,但需要以某种方式将它们结合起来

Select TaskId as ParentTaskId, ChildOf from Tasks where ChildOf = 0

注意:只有两层。。父母和孩子。。。没有孙子!所以希望这能让事情简单一点


非常感谢您的帮助。谢谢你到目前为止的帮助

像这样的东西应该可以做到:

SELECT TaskId as ParentTaskId, ChildOf , 
 (SELECT count(t2.TaskId) 
  FROM Tasks t2
  WHERE t2.ChildOf = t.TaskId) as CountChildren
FROM Tasks t 
WHERE t.ChildOf = 0
试试这个:

SELECT T1.TaskID, T1.ChildOf, count(*) from 
  Tasks as T1 join Tasks as T2 on T1.TaskID = T2.ChildOf 
  WHERE T1.ChildOf = 0 
    GROUP BY (T1.TaskID)

MySQL缺少现在使用的递归功能。MySQL站点曾经有一篇关于如何在MySQL中处理分层数据的优秀文章,但Oracle似乎已经将其删除了:/但是如果他需要获得多个级别的子级,他只需要递归功能。否则它就是一个简单的子查询。那么Brian,你只需要计算直接节点的数量,还是计算整个树(子节点的子节点)的数量。很好的问题。。。我只需要一个级别。。父->子无孙。这非常接近,但不会拉起没有孩子的父母,而不是使用左连接来获得没有孩子的父母。
SELECT T1.TaskID, T1.ChildOf, count(*) from 
  Tasks as T1 join Tasks as T2 on T1.TaskID = T2.ChildOf 
  WHERE T1.ChildOf = 0 
    GROUP BY (T1.TaskID)