0

Ich wollte die topologische Art eines DAG finden.Können wir die Ausgabe einer rekursiven Abfrage in eine andere rekursive Abfrage verwenden?

create table topo(
v1 int, 
v2 int 
); 

Insert into topo values (1,3),(2,5),(3,4),(4,5),(4,6),(5,7),(6,5),(7,null) 

WITH RECURSIVE path(S,d) AS(
select t1.v1, 0 from topo t1 left outer join topo as t2 on t1.v1=t2.v2 
where t2.v2 IS null 
UNION ALL 
select distinct t1.v2, path.d + 1 from path inner join topo as t1 on 
t1.v1=path.S 
) 
select S from path group by S order by MAX(d); 

Dieser Code gibt die Ausgabe der topologischen Reihenfolge eines Graphen an. Jetzt möchte ich diese Ausgabe in eine andere rekursive Abfrage verwenden, um den Pfad von einem Knoten zum anderen zu finden.

Kann ich die von diesem Code generierte Ausgabe in eine andere rekursive Abfrage verwenden. Ich habe versucht, das auf eine normale Art und Weise zu tun, aber die Ausgabe zeigte Fehler.

+0

Konnten Sie diesen Weg gerade erhalten, indem Sie dem vorhandenen rekursiven CTE ein neues Feld hinzufügen? – JNevill

+0

Wie? Angenommen, ich möchte den Pfad von 3 nach 7 erhalten. Ist das möglich, ohne eine weitere rekursive Abfrage zu schreiben? – user3503711

Antwort

1

Hinzufügen zu Ihrem vorhandenen rekursiven SQL-Pfad zu erhalten:

WITH RECURSIVE path AS(
select 
    t1.v1 as start, 
    t1.v2 as end, 
    CAST(t1.v1 as VARCHAR(30)) as path 
    0 as depth 
from topo t1 
    left outer join topo as t2 on t1.v1=t2.v2 
where t2.v2 IS null 

UNION ALL 
select 
    path.start , 
    t1.v2 as end, 
    path.path || '>' || t1.v1,  
    path.d + 1 
from path 
    inner join topo as t1 on t1.v1=path.end 
) 
SELECT * FROM path 

Nur in ein paar mehr Felder hinzufügen zu verfolgen, was passiert, wie Sie Ihre Hierarchie durchqueren. Start wird von der ersten Abfrage an statisch sein. Es wird 1 für jeden Datensatz sein, da das dein Ausgangspunkt ist. End ist der Knoten, an dem Sie gerade arbeiten. path wird den Endknoten verketten, wenn jeder neue gefunden wird. depth wird Ihnen sagen, wie weit Sie durchquert haben.

Verwandte Themen