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?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage