Wie man alle Kinder eines Elternteils und dann ihre Kinder mit Rekursion in der Abfrage erhält
Ich habe eine Struktur wie diese:
<Unit>
<SubUnit1>
<SubSubUnit1/>
<SubSubUnit2/>
...
<SubSubUnitN/>
</SubUnit1/>
<SubUnit2>
<SubSubUnit1/>
<SubSubUnit2/>
...
<SubSubUnitN/>
</SubUnit2/>
...
<SubUnitN>
<SubSubUnit1/>
<SubSubUnit2/>
...
<SubSubUnitN/>
</SubUnitN/>
</Unit>
Diese Struktur besteht aus 3 Ebenen: Haupteinheit, Untereinheiten und Untereinheiten.
Ich möchte alle Kinder nach UnitId auswählen.
Wenn ich nach Einheit suche, muss ich alle Baum bekommen.
Wenn ich nach SubUnit1 suche, muss ich SubUnit1 und alle untergeordneten Elemente von SubUnit1 abrufen.
Wenn ich SubSubUnit2 suche, muss ich mich besorgen.
Hier ist mein Versuch:
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
Ich benutze 3 Gewerkschaftswörter, es ist nicht gut, aber es funktioniert. Die Fallstruktur wird N Ebenen haben, wie muss ich das richtige Ergebnis erhalten?