gpt4 book ai didi

tsql - 从 sql 中的一组行数据(具有特定 id)中获取所有树

转载 作者:行者123 更新时间:2023-12-04 15:12:50 25 4
gpt4 key购买 nike

我的数据在表中,有 2 个字段,Id 和 ParentId。我用这种结构存储数据(后面有类似的图像)。如何获得从叶子到根的所有路径,包括 Id = 6 ? (结果样本如下)

--Data structure is as follow :
-- 1
-- /
--2 <- 3 9
-- \ \ /
-- 4 <- 5 7 8
-- \ / / /
-- 6 - - -
-- / \
-- 10 <- 11
-- /
--12

--Data In Table Is :
--Id ParentId
--1 null
--2 1
--3 2
--4 2
--5 3
--5 4
--6 4
--6 5
--6 7
--6 8
--7 9
--8 null
--9 null
--10 6
--11 6
--11 10
--12 10

--Result for all trees that include "Id = 6":
--12 > 10 > 6 > 4 > 2 > 1
--12 > 10 > 6 > 5 > 4 > 2 > 1
--12 > 10 > 6 > 5 > 3 > 2 > 1
--12 > 10 > 6 > 7 > 9
--12 > 10 > 6 > 8
--11 > 10 > 6 > 4 > 2 > 1
--11 > 10 > 6 > 5 > 4 > 2 > 1
--11 > 10 > 6 > 5 > 3 > 2 > 1
--11 > 10 > 6 > 7 > 9
--11 > 10 > 6 > 8
--11 > 6 > 4 > 2 > 1
--11 > 6 > 5 > 4 > 2 > 1
--11 > 6 > 5 > 3 > 2 > 1
--11 > 6 > 7 > 9
--11 > 6 > 8

最佳答案

你的表说 4 有它自己作为父级而不是其他任何东西,但是你有一行指出 12 > 10 > 6 > 5 > 4 > 2 > 1 所以我不能用那个设置产生相同的结果。

我的 sqlfiddle 在这里:http://sqlfiddle.com/#!6/873b9/3

假设 4 有 2 作为父级,我的代码看起来像这样(排序可能有点不同,但它的 SQL 所以没问题):

WITH records as
(
SELECT
leaf.Id
,leaf.ParentId
,case when NOT EXISTS(SELECT * FROM recTest where ParentId = leaf.Id) then 1 else 0 end as isLeaf
FROM recTest as leaf
)
,hierarchy as
(
SELECT Id
,NULL as ParentId
,cast(Id as varchar(100)) as chain
,isLeaf
FROM records
where ParentId IS NULL
UNION ALL
SELECT r.Id
,r.ParentId
,cast(cast(r.Id as varchar(100)) + ' > ' + h.chain as varchar(100)) as chain
,r.isLeaf
FROM records as r
INNER JOIN hierarchy as h
ON r.ParentId = h.Id
)
SELECT
h.chain
FROM hierarchy as h
WHERE isLeaf = 1
AND h.chain like '%6%'
OPTION (MAXRECURSION 0)

关于tsql - 从 sql 中的一组行数据(具有特定 id)中获取所有树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16164840/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com