我有一个表,可以将表中的另一个成员称为父表。该父级也可以将另一行称为其父级...依此类推。

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/

10-11 03:06
查看更多