Ich habe ein gerichteter Graph in einer Postgres-Datenbank mit diesen Beziehungen definiert:Besorgen Sie sich die Teilmenge eines gerichteten Graphen einen bestimmten Knoten mit SQL
CREATE TABLE node (
id int4 NOT NULL,
"name" varchar NULL,
CONSTRAINT pk_node PRIMARY KEY (id),
CONSTRAINT unq_node_name UNIQUE ("name"),
);
CREATE TABLE link (
id int4 NOT NULL,
"name" varchar NULL,
id_node_from int4 NULL,
id_node_to int4 NULL,
CONSTRAINT pk_link PRIMARY KEY (id),
CONSTRAINT unq_link_name UNIQUE ("name"),
CONSTRAINT fk_link_node_from FOREIGN KEY (id_node_from) REFERENCES node(id),
CONSTRAINT fk_link_node_to FOREIGN KEY (id_node_to) REFERENCES node(id)
);
einen Knoten Gegeben n, würde Ich mag das erhalten Satz von Knoten, von denen es möglich ist, n zu erreichen, der den gerichteten Graph durchquert.
Wie kann es mit einer einzigen SQL-Abfrage gemacht werden?
Ich denke, du bist nach einer rekursiven Cte. Beispiel: http://stackoverflow.com/questions/25754366/recursive-query-challenge-simple-parent-child-example oder http://stackoverflow.com/questions/53108/is-it-possible-to-make- a-recursive-sql-query (beachte die höchste upvoted Antwort) oder sogar http://stackoverflow.com/questions/30336265/postgresql-recursive-cte-results-order – xQbert
xQbert: Ich weiß, wie ich dies mit einer Funktion erreichen kann (gespeicherte Prozedur). Ich frage mich, ob es mit einer rekursiven SQL-Abfrage gemacht werden kann - sie sind nicht zu schwer mit Bäumen, aber bisher habe ich es nicht mit einem gerichteten Graphen gemacht. –