【问题标题】:SQL Query for Parent Child Relationship父子关系SQL查询
【发布时间】:2008-10-16 03:08:34
【问题描述】:
我有父子关系的数据库表:
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
【问题讨论】:
标签:
sql
sql-server-2005
hierarchical-data
【解决方案1】:
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]
【解决方案2】:
您应该考虑将嵌套集模型用于 SQL 数据库中的父子关系。这比尝试像这样将记录的 parentID 存储在表中要好得多,并且使这样的查询更容易。
【解决方案3】:
并且只是为了确保它在它自己的父级时工作(否则它将递归直到它中断):
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]
【解决方案4】:
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