1

私がやりたい再帰クエリについてあなたの助けをお願いします。私はDB2でこのテーブルを作成しました:

接続リセット;
サンプルに接続します。
ドロップテーブルフライト;

テーブルフライトの作成
 (START VARCHAR(16)NOT NULL、
  DESTINATION VARCHAR(16)NOT NULL、
  DISTANCE BIGINT NOT NULL    
 );
FLIGHTS値に挿入します('Dublin'、'Bhogrol'、5340);
FLIGHTS値に挿入します('Dublin'、'Smallville'、5500);
FLIGHTS値に挿入します('Smallville'、'Seattle'、1300);
FLIGHTS値に挿入します('Smallville'、'Clacton'、6700);
FLIGHTS値に挿入します('Bhogrol'、'Moscow'、2320);
FLIGHTS値に挿入します('Moscow'、'Seattle'、3600);
FLIGHTS値に挿入します('Bhogrol'、'Smallville'、2950);
FLIGHTS値に挿入します('Rome'、'Bhogrol'、720);
FLIGHTS値に挿入します('Clacton'、'Moscow'、6700);
FLIGHTS値に挿入します('Rome'、'Smallville'、3050);
FLIGHTS値に挿入します('Schippol'、'Smallville'、8990);
FLIGHTS値に挿入します('Seattle'、'Schippol'、7840);
FLIGHTS値に挿入します('Bhogrol'、'Clacton'、1300);
FLIGHTS値に挿入します('Bilbao'、'Moscow'、1270);
FLIGHTS値に挿入します('Smallville'、'Schippol'、8990);

ダブリンから8駅未満の乗り継ぎ便をすべて見つけたい。クエリからの出力は、次の3フィールド形式の行のセットである必要があります。[route、distance、stops]ここで、routeフィールドは、ダブリンからの接続された各パスで訪問した空港から作成された文字列です。これは、「-」文字で区切られた一連の空港名です。ただし、空港名全体ではなく、最初の3文字だけを表示して、各文字列がたとえばDub> Sch> Dub> Sma> Sch> Dub> Sma>Cla>Mosのようになるようにします。属性「route」のタイプはVARCHAR(40)である必要があります。

私はこのように始めようと思いました:

WITHパス(出発地、目的地、距離、停車地)
なので(
  SELECT f.start、f.destination、f.distance、0
  フライトからf
  WHERE start='ダブリン'
  ユニオンオール
  SELECT p.start、f.destination、
  p.distance + f.distance、p.stops + 1
  フライトf、パスpから
  WHERE p.destination = f.start AND p.stops <8
)。
出発地、目的地、距離、停車地を選択
FROMパス;

正しいですか?はいの場合、どうすればよいですか?

4

1 に答える 1

3

私はあなたがこのようなものを探していると思います:

WITHパス(ルート、出発地、目的地、距離、停車地)
なので
((
  SELECT substr(f.start、1,3)|| '>' || ルートとしてのsubstr(f.destination、1,3)、
         f.start、
         f。宛先、
         f。距離、
         0
  フライトからf
  WHERE start='ダブリン'
  ユニオンオール
  SELECT p.route || '>' || ルートとしてのsubstr(f.destination、1,3)、
         f.start、
         f。宛先、
         p.distance + f.distance、
         p.stops + 1
  フライトからf
    JOINパスpONp.destination = f.start AND p.stops <8
)。
ルート、距離、停車地を選択
FROMパス;
于 2011-03-16T08:36:18.087 に答える