如何在SQL中生成导致给定节点的层次结构路径?
发布时间:2021-02-27 14:31:38 所属栏目:MsSql教程 来源:网络整理
导读:在我的MS SQL 2008 R2数据库中,我有这个表: TABLE [Hierarchy][ParentCategoryId] [uniqueidentifier] NULL,[ChildCategoryId] [uniqueidentifier] NOT NULL 我需要编写一个查询来生成通向给定节点的所有路径. 让我们说我有以下树: A-B--C-D--C 哪个将存储
|
在我的MS SQL 2008 R2数据库中,我有这个表: TABLE [Hierarchy] [ParentCategoryId] [uniqueidentifier] NULL,[ChildCategoryId] [uniqueidentifier] NOT NULL 我需要编写一个查询来生成通向给定节点的所有路径. 让我们说我有以下树: A -B --C -D --C 哪个将存储为: NULL | A A | B A | D B | C D | C 在询问C的路径时,我想回到两条路径(写得更多或更少这样): A > B > C,A > D > C 解决方法这是我的解决方案,Sql FiddleDECLARE @child VARCHAR(10) = 'C'
;WITH children AS
(
SELECT
ParentCategoryId,CAST(ISNULL(ParentCategoryId + '->','') + ChildCategoryId AS VARCHAR(4000)) AS Path
FROM Hierarchy
WHERE ChildCategoryId = @child
UNION ALL
SELECT
t.ParentCategoryId,list= CAST(ISNULL(t.ParentCategoryId + '->','') + d.Path AS VARCHAR(4000))
FROM Hierarchy t
INNER JOIN children AS d
ON t.ChildCategoryId = d.ParentCategoryId
)
SELECT Path
from children c
WHERE ParentCategoryId IS NULL
输出: A->D->C A->B->C 更新: @AlexeiMalashkevich,为了获得身份证,你可以试试这个 SQL Fiddle DECLARE @child VARCHAR(10) = 'C'
;WITH children AS
(
SELECT
ParentCategoryId,ChildCategoryId AS Path
FROM Hierarchy
WHERE ChildCategoryId = @child
UNION ALL
SELECT
t.ParentCategoryId,d.ParentCategoryId
FROM Hierarchy t
INNER JOIN children AS d
ON t.ChildCategoryId = d.ParentCategoryId
)
SELECT DISTINCT PATH
from children c (编辑:海洋资讯信息网_我爱站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- sql-server – T-SQL DROP TYPE IF EXISTS
- sql-server – 如何在T-SQL / SQL Server中为超级/子类型(继
- sqlserver中行列互换怎么完成?
- sql-server-2008 – 是否可以在SQL Server 2008中选择特定的
- sql-server-2005 – SQL Server 2005中与复合主键的外键关系
- 多表关联同时更新多条不同的记录方法说明
- sql-server – 资源池“internal”中没有足够的系统内存来运
- sql server触发器有哪些类型,怎样创建?
- sql-server – SQL Server CASE语句是否评估所有条件或在第
- sql-server – 用于sql server的mysqldump
站长推荐
- sql-server-2008 – Hyper-V的4个最佳用途是什么
- sql-server-2008-r2 – 将SQL Server 2008 R2表/
- sql server怎样写查询语句?聊聊查询性能问题
- sql-server-2005 – 过程从ADO.NET中超时,但在SS
- 如何在我的sql数据库中存储一对多的关系? (MySQ
- sql的substring函数功能是什么,如何使用?
- SQL Server 2008:将列值转换为行
- sql 中rand函数怎样用?sql怎样获取区间随机数?
- sql-server – SQL Server中的分页
- sql-server – SQL Server PDF全文搜索无法在Fil
热点阅读

