给定一个子ID,我需要返回一个查询,其中包含该子项的所有父项以及他们的父项,直到我找到根父项.例如,给定这些数据:
ID / Parent ID
1 / 0
2 / 1
3 / 2
4 / 0
5 / 3
Run Code Online (Sandbox Code Playgroud)
所以如果我传入ID 5,我想得到一个查询结果:
ID / Parent ID
1 / 0
2 / 1
3 / 2
Run Code Online (Sandbox Code Playgroud)
这个表不适用于hierarchyid类型,所以我怀疑这需要用CTE完成,但不知道如何.如果它可以在SQL查询/ proc中完成,任何帮助将不胜感激.
谢谢
Pau*_*ing 26
这或多或少是你想要的:
-- 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;
Run Code Online (Sandbox Code Playgroud)
参考:
工作范例:
-- 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;
Run Code Online (Sandbox Code Playgroud)
输出:
1 | 0
2 | 1
3 | 2