次の表があります。
ID ParentID
1 NULL
2 1
3 2
4 NULL
5 4
6 5
7 3
特定の子 ID の最初の ID を見つけたい。例: ID=7 で結果が 1
ID=6 で結果が 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
どうやってするの?
これを解決するには、少し再帰的な 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
これを試して:
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