4

我有下表:

ID     ParentID
1         NULL
2          1
3          2
4          NULL
5          4
6          5
7          3

我想找到特定子 ID 的第一个 ID。示例:ID=7 结果为 1
ID=6 结果为 4

怎么做?

4

2 回答 2

4

你需要做一些递归 CTE 魔法来解决这个问题。

因此,给定表变量中的数据:

declare @data table(id int, parentid int)
insert into @data
  select 1, null
  union select 2,1
  union select 3,2
  union select 4, null
  union select 5,4
  union select 6,5
  union select 7,3

以下应该可以解决问题:

;with recursiveTable as
(
    select d.id, d.parentId, 0 as depth
    from @data d
    where d.id=6 -- Parameterize this
    union all

    select d.id, d.parentid, r.depth-1
    from @data d
    inner join recursiveTable r
    on d.id = r.parentId
)
select top 1 id 
from recursiveTable 
order by depth

插入6如上返回4。将此更改为按要求7返回1

于 2012-08-07T11:44:56.360 回答
0

试试这个:

 CREATE TABLE childpar(ID int,ParentID int)
    INSERT INTO childpar 
    values(1,NULL),
    (2, 1),
    (3, 2),
    (4, NULL),
    (5, 4),
    (6, 5),
    (7, 3)


DECLARE @inpyID int
SET @inpyID=7

;WITH CTE1 as (
select * from childpar where id=@inpyID
union all
select c2.* from CTE1 c1 inner join childpar c2 on c1.ParentID = c2.ID
)

select top 1 id from CTE1 order by id asc
于 2012-08-07T11:50:44.607 回答