gpt4 book ai didi

sql-server - 递归查找给定 child 的所有祖先

转载 作者:行者123 更新时间:2023-12-02 07:23:58 24 4
gpt4 key购买 nike

给定一个 child ID,我需要返回一个包含该 child 的所有 parent 及其 parent 的查询,直到找到根 parent 。例如,给定以下数据:

ID / Parent ID
1 / 0
2 / 1
3 / 2
4 / 0
5 / 3

因此,如果我传入 ID 5,我希望获得包含结果的查询:

ID / Parent ID
1 / 0
2 / 1
3 / 2

该表不适用于 Hierarchyid 类型,因此我怀疑这需要使用 CTE 来完成,但不知道如何完成。如果它可以在 SQL 查询/过程中完成,任何帮助将不胜感激。

谢谢

最佳答案

这或多或少是您想要的:

-- CTE to prepare hierarchical result set
;WITH #results AS
(
SELECT id,
parentid
FROM [table]
WHERE id = @childId
UNION ALL
SELECT t.id,
t.parentid
FROM [table] t
INNER JOIN #results r ON r.parentid = t.id
)
SELECT *
FROM #results;

引用:

工作示例:

-- create table with self lookup (parent id)
CREATE TABLE #tmp (id INT, parentid INT);

-- insert some test data
INSERT INTO #tmp (id, parentid)
SELECT 1,0 UNION ALL SELECT 2,1 UNION ALL SELECT 3,2
UNION ALL SELECT 4,0 UNION ALL SELECT 5,3;

-- prepare the child item to look up
DECLARE @childId INT;
SET @childId = 5;

-- build the CTE
WITH #results AS
(
SELECT id,
parentid
FROM #tmp
WHERE id = @childId
UNION ALL
SELECT t.id,
t.parentid
FROM #tmp t
INNER JOIN #results r ON r.parentid = t.id
)

-- output the results
SELECT *
FROM #results
WHERE id != @childId
ORDER BY id;

-- cleanup
DROP TABLE #tmp;

输出:

1 | 0
2 | 1
3 | 2

关于sql-server - 递归查找给定 child 的所有祖先,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11598827/

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