父子链的SQL查询

jeb*_*ick 6 sql t-sql sql-server sql-server-2005 hierarchical-data

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

id     col1     col2    parentID
1      foo      bar       NULL
2      blah     boo       1
3      fob      far       2
4      wob      lob       NULL
Run Code Online (Sandbox Code Playgroud)

我想返回给出id的链.因此,如果id为3,我将返回第3行,第2行和第1行.如果id为2,我将返回第2行和第1行.如果id为1或4,我将返回该行.

谢谢

OMG*_*ies 12

使用递归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
Run Code Online (Sandbox Code Playgroud)

结果:

id
---
3
2
1
Run Code Online (Sandbox Code Playgroud)