2014-12-13 231 views
1

我创建了以下小提琴: http://sqlfiddle.com/#!2/fc0d9/19计数嵌套组儿童

我想从以下适应SQL来算每个节点都有直接的孩子的数量: http://en.wikipedia.org/wiki/Nested_set_model

CREATE TABLE Personnel 
    (
    name varchar(20), 
    lft int, 
    rgt int 
    ); 

SELECT Parent.name, count(Child.*) 
FROM Personnel AS Child, Personnel AS Parent 
WHERE Parent.lft < Child.lft AND Parent.rgt > Child.rgt 
GROUP BY Parent.name 
+0

这是正确的数据吗? http://sqlfiddle.com/#!2/fc0d9/20 – paqogomez 2014-12-13 02:20:26

+0

是的,这是人事数据。我的SQL显示了所有后代的数量,但是我正试图将数量限制在直接的孩子身上。维基百科链接显示如何只返回直接的孩子,但我不知道如何计算它们。 – Dercni 2014-12-13 02:27:47

回答

3

以下修复了您的语法错误:

SELECT Parent.name, count(*) 
FROM Personnel AS Child join 
    Personnel AS Parent 
    on Parent.lft < Child.lft AND Parent.rgt > Child.rgt -- associate Child Nodes with ancestors 
GROUP BY Parent.name; 

SQL不允许表达式sion count(child.*)