SQL:选择子项和子项数

时间:2014-05-05 16:38:42

标签: mysql sql

我想要选择孩子的类别和数量。

类别的结构:

Id  Parent   Name
0     0      main
1     0      Games
2     0      Books
3     2      Drama
4     2      Comedy

对于id'0',它应返回游戏0,书籍2.对于id'2',它应该返回戏剧0,喜剧0

怎么做?

3 个答案:

答案 0 :(得分:4)

Id  Parent   Name
1     0      main
2     1      Games
3     1      Books
4     3      Drama
5     3      Comedy

如果您添加' 0'您可以使用简单查询执行主行的值。 Main是Book and Games的父母,因此我们不得不使用Main的其他一些值。

所以在那之后你需要写一个简单的查询

Select c1.name, (select count(id) from category c2 where c2.parent = c1.id) 
    as count from category c1  where c1.parent=1;

谢谢。

答案 1 :(得分:0)

使用内部联接来获取数据:

   SELECT c.Name, c.Parent
   FROM Category c 
   INNER JOIN Category p on c.id = p.parent

答案 2 :(得分:0)

这将返回预期结果:

SELECT t1.parent, t1.name, COUNT(t2.id)
FROM vt AS t1 LEFT JOIN vt AS t2 ON t2.parent =t1.id
WHERE t1.parent <> t1.id
GROUP BY t1.parent, t1.name

但是如果有其他级别的嵌套类别,则需要某种递归查询,然后语法取决于您的DBMS。

修改

我不知道您的实际规则如何计算这些类别,但是当知道(和小)层次数时,可以使用多个左连接处理层次结构。

SELECT t1.parent, t1.name, COUNT(COALESCE(t2.id,t3.id,t4.id))
FROM vt AS t1 LEFT JOIN vt AS t2 
ON t2.parent =t1.id
LEFT JOIN vt AS t3 
ON t3.parent =t2.id
LEFT JOIN vt AS t4
ON t4.parent =t3.id
WHERE t1.parent <> t1.id
GROUP BY t1.parent, t1.name