我有一个包含三列NodeId,ParentNodeId,NodeName的表。对于每个节点,我希望得到像“lvl1/lvl2/lvl3 ...”这样的完整路径,其中lvl1,lvl2和lvl3是节点名称。我发现一个功能,在这个链接http://www.sql-server-helper.com/functions/get-tree-path.aspx。但我想用CTE或任何其他技术来提高效率。请让我知道是否有可能以更好的方式实现这一目标。提前致谢。SQL查询以获得完整的层次结构路径
5
A
回答
6
这是一个CTE版本。
declare @MyTable table (
NodeId int,
ParentNodeId int,
NodeName char(4)
)
insert into @MyTable
(NodeId, ParentNodeId, NodeName)
select 1, null, 'Lvl1' union all
select 2, 1, 'Lvl2' union all
select 3, 2, 'Lvl3'
declare @MyPath varchar(100)
;with cteLevels as (
select t.NodeId, t.ParentNodeId, t.NodeName, 1 as level
from @MyTable t
where t.ParentNodeId is null
union all
select t.NodeId, t.ParentNodeId, t.NodeName, c.level+1 as level
from @MyTable t
inner join cteLevels c
on t.ParentNodeId = c.NodeId
)
select @MyPath = case when @MyPath is null then NodeName else @MyPath + '/' + NodeName end
from cteLevels
order by level
select @MyPath
0
最有效的方法,以我的经验,将增加一个额外的领域,RootNodeID,包含treestructure的顶级节点的ID。 因此,您可以非常简单高效地查询整个树结构中的所有节点。
为了构建这个树结构,应用程序中的一个简单的递归函数应该可以正常工作。
我知道它是非规范化的,有些人并没有真正赞同这个概念,但是我从我的专业经验中学到,与精致的t-sql脚本相比,这会带来巨大的性能提升。
4
我是这样解决的,与乔的解决方案非常相似。
with cte (NodeId,NodeName,hierarchyPath)as
(
select NodeId,NodeName, NodeName
from Node
where ParentNodeId is null
union all
select n.NodeId, n.NodeName, CONVERT(varchar(256), cte.hierarchyPath + '/' + n.NodeName)
from Node n
join cte on n.ParentNodeId = cte.NodeId
)
select *
from cte
order by NodeId
相关问题
- 1. CTE SQL查询得到完整路径
- 2. oracle sql查询顶层查询层次结构查询
- 3. 如何在Intellij中获得完整的调用层次结构
- 4. 如何使用SQL CTE获取完整层次结构
- 5. Javascript:以字符串形式获得完整的对象层次结构
- 6. 针对HP ALM的SQL查询获取完整需求路径
- 7. 给定层次结构中的任何子项,通过INFORMIX层次结构获取完整树SQL
- 8. 绑定路径层次结构
- 9. 如何获取数组中元素的层次结构路径
- 10. 用于在列中构建层次结构的SQL查询
- 11. 在SQL Server层次结构中展平树形路径ID
- 12. 查询RavenDB中的层次结构
- 13. 多个表的层次结构查询
- 14. SQL查询/存储过程获取完整的组织层次结构详细信息
- 15. IDE如何获得类层次结构
- 16. 如何获得LINQ to SQL的完整节点路径?
- 17. 层次结构在SQL Server - 多层次
- 18. SQL层次查询
- 19. 查询订购父/子-层次结构
- 20. 管理层次结构查询
- 21. 查询,获得结果再次查询
- 22. SQL查询 - 从层次结构的两个不同水平
- 23. SQL选择组织树(层次结构)的查询
- 24. 有两个表的Sql层次结构查询
- 25. 获取节点的完整路径,在与XPath查询得到它在JavaScript
- 26. SQL Server CTE层次结构?
- 27. SQL递归层次结构
- 28. 使用相对路径构建视图层次结构
- 29. 如何在U-SQL查询中获取文件的完整路径
- 30. 拖放时可以从粘贴板获得完整路径吗?
任何机会,你可以帮我适应我的情况这个答案? http://stackoverflow.com/q/5549480/93202 – 2011-04-05 09:00:18