我有一个表,可以将表中的另一个成员引用为父级。该父级还可以将另一行引用为其父级......依此类推。
id col1 col2 parentID
1 foo bar NULL
2 blah boo 1
3 fob far 2
4 wob lob NULL
我想返回给定 id 的链。因此,如果 id 为 3,我将返回第 3 行、第 2 行和第 1 行。如果 id 为 2,我将返回第 2 行和第 1 行。如果 id 为 1 或 4,我将仅返回该行。
谢谢
最佳答案
使用 recursive CTE :
DECLARE @id INT
SET @id = 3
;WITH hierarchy AS (
SELECT t.id, t.parentid
FROM YOUR_TABLE t
WHERE t.id = @id
UNION ALL
SELECT x.id, x.parentid
FROM YOUR_TABLE x
JOIN hierarchy h ON h.parentid = x.id)
SELECT h.id
FROM hierarchy h
结果:
id
---
3
2
1
关于父子链的SQL查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4188427/