给定一个子ID,我需要返回一个查询,其中包含该孩子的所有父母以及他们的父母,直到我找到根父母。 例如,给定这些数据:
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查询/ proc中完成,那么任何帮助都将受到赞赏。
由于
答案 0 :(得分:25)
这或多或少是您想要的:
-- 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