我需要帮助一件事;
表就像
ID, name, parent
1, ABC, -
2, DEF, 1
3, GHI, 1
我希望每一行都有子项目计数,我从一个选择查询中获取表格
select *, COUNT((SELECT ID FROM ... WHERE parent = this.ID)) from ...
这可能在SQL中吗?
结果应该像
1, ABC, 2
2, DEF, 0
3, GHI, 0
答案 0 :(得分:1)
获取每个父级的计数,然后将其与原始表连接在id:
上SELECT
t1.id, t1.name, IFNULL(c, 0) cnt
FROM
your_table t1
LEFT JOIN
(SELECT
parent, COUNT(*) c
FROM
your_table
GROUP BY parent) t2 ON t1.id = t2.parent;
答案 1 :(得分:0)
如果您只有一个孩子级别,那么试试这个
select *, (SELECT count(B.ID) FROM Yourtable B WHERE A.Id = B.Parent)
from Yourtable A
注意:如果您想要将大孩子纳入计数
,这将不起作用答案 2 :(得分:0)
自己加入桌子。
SELECT t1.*, IFNULL(COUNT(t2.id), 0) AS childcount
FROM yourTable AS t1
LEFT JOIN yourTable AS t2 ON t2.parent = t1.id
GROUP BY t1.id
LEFT JOIN
是处理没有子项的情况所必需的,因此您在结果中得到0
(INNER JOIN
会省略这些行。)