父子关系的SQL查询
我有一个具有父子关系的db表,如下所示:父子关系的SQL查询,sql,sql-server-2005,hierarchical-data,Sql,Sql Server 2005,Hierarchical Data,我有一个具有父子关系的db表,如下所示: NodeId NodeName ParentId ------------------------------ 1 Node1 0 2 Node2 0 3 Node3 1 4 Node4 1 5 Node5 3 6 Node6 5 7 Node7 2
NodeId NodeName ParentId
------------------------------
1 Node1 0
2 Node2 0
3 Node3 1
4 Node4 1
5 Node5 3
6 Node6 5
7 Node7 2
这里parentId=0表示它是根级别的节点。现在我想编写一个SQL查询,它将返回父类别所有级别的子级
e、 g.对于nodeId=1,它应该返回3、4、5、6
我使用的是MS SQL Server 2005您应该研究在SQL数据库中使用嵌套集模型来处理父子关系。这比像这样在表中存储记录的parentID要好得多,并且使这样的查询更容易 为了确保如果它是它自己的父级,那么它可以工作(否则它将递归,直到它崩溃):
with [CTE] as (
select * from [TheTable] c where c.[ParentId] = 1
union all
select * from [CTE] p, [TheTable] c where c.[ParentId] = p.[NodeId]
)
select * from [CTE]
,其中[CTE]为(
从[TheTable]c中选择*其中c.[ParentId]=1
联合所有
从[CTE]p[TheTable]c中选择*其中c.[ParentId]=p.[NodeId]
和c.[ParentId]c.[NodeId]
)
从[CTE]中选择*
我建议添加最大递归提示。
with [CTE] as (
select * from [TheTable] c where c.[ParentId] = 1
union all
select * from [CTE] p, [TheTable] c where c.[ParentId] = p.[NodeId]
and c.[ParentId] <> c.[NodeId]
)
select * from [CTE]
WITH Temp_Menu AS
(
SELECT AM.* from FCB_AccessMenu AM where AM.[ParentId] = 6
UNION ALL
SELECT AM.* FROM FCB_AccessMenu AM ,Temp_Menu TM WHERE AM.[ParentID]=TM.[MenuID]
)
SELECT * FROM Temp_Menu ORDER BY ParentID