我有带有父子关系的数据库表,如下所示:
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查询,它将返回父类别所有级别的子级。
例如,对于nodeId = 1,它应该返回3,4,5,6。
我使用的是MS SQL Server 2005
发布于 2008-10-16 03:17:40
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]发布于 2008-11-17 13:56:33
您应该考虑在SQL数据库中为父子关系使用嵌套Set Model。这比尝试像这样将记录的parentID存储在表中要好得多,并且使这样的查询更加容易。
发布于 2009-05-06 06:45:19
为了确保它能正常工作,如果它是它自己的父类(否则它将递归,直到它崩溃):
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]https://stackoverflow.com/questions/207309
复制相似问题