最初または中間または最後にIDを指定すると、それらの間にリンクされているすべての行を検索したい。これにより再帰でセグメントを与えられた親と子を取得するSQL
は、私は2と3を取得します、@Idが2に等しい場合、再帰的に
declare @T table(
Id int primary key,
Name nvarchar(255) not null,
ParentId int)
insert into @T values
(1, 'A', NULL),
(2, 'B', 1),
(3, 'C', 2),
(4, 'D', NULL),
(5, 'E', 1)
declare @Id int = 2
;with cte as
(
select T.*
from @T as T
where T.Id = @Id
union all
select T.*
from @T as T
inner join cte as C
on T.ParentId = C.Id
)
select *
from cte
子要素を発見した。しかし、私はこのケースでは、あまりにも親を取得したい1.
私はこれを取得したい:
場合は、id = 1
1 A NULL
2 B 1
3 C 2
5 E 1
ID = 2の場合
1 A NULL
2 B 1
3 C 2
5 E 1
ID = 3
1 A NULL
2 B 1
3 C 2
5 E 1
場合は、id = 5
1 A NULL
2 B 1
3 C 2
5 E 1
私はこれをどのように修正することができます場合は、id = 4
4 D NULL
場合は?
あなたの質問を編集して、所望の出力を追加することができますか? – GuidoG
なぜid = 1の場合、 '5 E 1'レコードを取得すべきではありませんか? –
申し訳ありませんが悪いです。修正されました。 –