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 に答える