2017-04-22 3 views
-1

私は以下の表を持っています。連鎖データの検索方法は?

chained_schedule:私は入力parent_schedule_id=71として与える場合は

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

、出力はその特定のレコードおよび他のレコード、...等へ再びできるチェーンそのnext_schedule_id、によって識別されるレコードを見つける必要があります。

は、したがって、上記のデータとクエリのために、出力は次のようにする必要があります:

chained_id parent_schedule_id next_schedule_id 
    1    71     72 
    2    72     73 

はどうすればこれを行うことができますか?

+0

どのようなDBMSを使用していますか? –

+2

どのDBMSを使用していますか? Postgres?オラクル? –

+0

parent_schedule_id = 71を指定すると、最初の行のみを選択する必要があります。なぜparent_schedule_id 72を持つ行2? –

答えて

1

ほとんどのデータベースは、何らかの形の再帰的なCTEをサポートしています。 ANSI構文は次のとおりです。

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

このCTEはスプリングデータjpaを使用して実装できますか? –

+0

私はスプリングデータjpaを使用していません。これは、ANSI標準の再帰的CTE(Postgres、Oracle、SQL Server、DB2、Teradataなど)をサポートする任意のデータベースで実装できます。 –

+0

Oracle 11gでこの問合せを実行しようとしましたが、行番号にエラーが表示されています。 1(キーワード不足) –