Dies ist eine Variation des normalen CTE, in der Sie alle übergeordneten Elemente eines Knotens finden. Einziger Unterschied ist:Gemeinsamer Tabellenausdruck, bei dem in beiden Spalten keine Wurzeln vorhanden sind
- Der größte Nachkomme hat kein
null
Kind. Stattdessen ist es einfach nicht in der Spaltechild
vorhanden.
Hier ist mein Versuch:
insert into t (parent, child) values (1, 2)
insert into t (parent, child) values (1, 3)
insert into t (parent, child) values (4, 2)
insert into t (parent, child) values (2, 5)
insert into t (parent, child) values (2, 6)
insert into t (parent, child) values (9, 6)
insert into t (parent, child) values (6, 7)
insert into t (parent, child) values (6, 8)
with cte as
(
select child, parent, 0 as level
from t
where parent = 5
union all
select q.child, q.parent, level+1
from t q
inner join cte as c on c.parent= q.child
)
select distinct parent from cte
where parent <> 5
In diesem Fall, wenn ich versuche, alle Eltern für 5
zu bekommen, ist nichts gefunden, weil 5
kein Elternteil jemand ist. Wenn ich versuche, alle Eltern für 2
zu finden, ist es jedoch erfolgreich, weil 2
ein Elternteil zu 5
und 6
ist.
Dies keine gangbare Hierarchie ist. 2 & 6 werden zweimal als Kinder aufgeführt. Ich habe sogar den Feldnamen geändert, vielleicht ist das ein Kopier-/Einfügefehler. Dein Cte wird eine Hierarchie aufbauen, du magst die Resultate vielleicht nicht mögen 6 hatte die größte Bevölkerung –
Ich habe nie gesagt, dass es ein Baum war. Nichts sagt, dass ein Kind nicht mehrere Eltern haben kann oder dass ein Elternteil nicht mehrere Kinder haben kann. – jiaweizhang
Wenn dies eine Frei/Ad-hoc-Hierarchie ist, ist das in Ordnung. Ich stimme zu, dass ein Kind mehrere Eltern haben kann (d. H. Ein Bericht kann zu Risk Analytics und vierteljährlichen Ergebnissen gehören), aber warum dann die Frage? Klar ist 5 kein Elternteil. –