私はこのような構造を持っています:
<Unit>
<SubUnit1>
<SubSubUnit1/>
<SubSubUnit2/>
...
<SubSubUnitN/>
</SubUnit1/>
<SubUnit2>
<SubSubUnit1/>
<SubSubUnit2/>
...
<SubSubUnitN/>
</SubUnit2/>
...
<SubUnitN>
<SubSubUnit1/>
<SubSubUnit2/>
...
<SubSubUnitN/>
</SubUnitN/>
</Unit>
この構造には、メイン ユニット、サブユニット、サブサブユニットの 3 つのレベルがあります。
UnitId ですべての子を選択したい。
ユニットで検索すると、すべてのツリーを取得する必要があります。
SubUnit1 で検索すると、SubUnit1 と SubUnit1 のすべての子を取得する必要があります。
SubSubUnit2 を検索すると、それ自体を取得する必要があります。
これが私の試みです:
with a(id, parentid, name)
as (
select id, parentId, name
from customer a
where parentId is null
union all
select a.id, a.parentid, a.Name
from customer
inner join a on customer.parentId = customer.id
)
select parentid, id, name
from customer pod
where pod.parentid in (
select id
from customer grbs
where grbs.parentid in (
select id
from customer t
where t.parentid = @UnitId
))
union
select parentid, id, name
from customer grbs
where grbs.parentid in (
select id
from customer t
where t.parentid = @UnitId
)
union
select parentid, id, name
from customer c
where c.Id = @UnitId
order by parentid, id
私は3つのユニオンワードを使用しています。うまくいきませんが、機能します。ケース構造には N レベルがありますが、正しい結果を得るにはどうすればよいですか?