在SQL Server中查找树的叶节点

时间:2013-01-13 15:58:32

标签: sql-server stored-procedures

这是我桌子的架构:

Create Table OBJECT_TREE 
( PARENT_ID     int, 
CHILD_ID    int )

该表中的示例数据如下所示:

PARENT_ID   CHILD_ID
---------------------
1             2
2             3
2             4
2             5
3             6
3             7
4             8
4             9

1 ________2________3_______6
                   |       |
                   |       |______7
                   |
                   |
                   |______4_______8
                   |              |
                   |              |______9
                   |
                   |
                   |______5

SQL Server存储过程应该在给定节点的层次结构中“向下”返回所有对象(节点2的所有向下层次结构对象都是3,4,5,6,7,8,9)

请帮助找到树的叶节点。

2 个答案:

答案 0 :(得分:5)

幸运的是,这是需要递归的少数情况之一:

SELECT DISTINCT child_id
FROM object_tree ot
WHERE NOT EXISTS (
    SELECT *
    FROM object_tree nx
    WHERE nx.parent_id = ot.child_id
    );

答案 1 :(得分:0)

此查询将返回没有chield节点的所有叶节点。

 SELECT  ot.child_id
FROM object_tree ot
left join object_tree nx on  nx.parent_id = ot.child_id
where nx. parent_id is null