2017-04-22 1 views
-1

Ich habe eine Tabelle unten.Wie finden Sie verkettete Daten?

chained_schedule:

chained_id parent_schedule_id next_schedule_id 
    1    71     72 
    2    72     73 
    3    74     75 

Wenn ich gebe als Eingabe parent_schedule_id=71, soll eine Ausgabe diesen bestimmten Datensatz und den Rekord von seiner next_schedule_id, die wiederum Kette zu einem anderen Datensatz, identifiziert finden ... etc.

Sie also die oben genannten Daten und Abfrage sollte die Ausgabe wie folgt sein:

chained_id parent_schedule_id next_schedule_id 
    1    71     72 
    2    72     73 

Wie kann ich das tun?

+0

Was ??? Bitte erläutern Sie, was Sie gerade tun –

+2

Welche DBMS benutzen Sie? Postgres? Orakel? –

+0

Wenn Sie parent_schedule_id = 71 angeben, sollte nur die erste Zeile ausgewählt werden. Warum Zeile 2 mit parent_schedule_id 72 ?? –

Antwort

1

Die meisten Datenbanken unterstützen eine Form von rekursiven CTEs. Die ANSI-Syntax lautet:

with recursive cte as (
     select cs.* 
     from chained_schedule cs 
     where parent_schedule_id = 71 
     union all 
     select cs.* 
     from chained_schedule cs join 
      cte 
      on cte.next_schedule_id = cs.parent_schedule_id 
    ) 
select * 
from cte; 
+0

können wir diese CTEs mit Federdaten jpa implementieren? –

+0

verwende ich nicht verwenden Federdaten jpa. Sie können dies in jeder Datenbank implementieren, die rekursive ANSI-CTEs unterstützt (Postgres, Oracle, SQL Server, DB2, Teradata). –

+0

Ich habe versucht, diese Abfrage in Oracle 11g auszuführen, aber ich bekomme Fehler bei Zeile Nr. 1 (fehlendes Schlüsselwort) –