17.10 - 1つの再帰的ビュー定義の中で複数のシード文と再帰文を指定できる - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQLデータ定義言語 詳細トピック

Product
Advanced SQL Engine
Teradata Database
Release Number
17.10
Release Date
2021年7月
Content Type
プログラミング リファレンス
Publication ID
B035-1184-171K-JPN
Language
日本語 (日本)

1つの再帰ビュー定義の中に複数のシード文と再帰文を指定できます。指定される最初の文はシード文でなければなりません。

単一の再帰ビュー定義内にシードまたは再帰文をいくつでも指定できますが、システムの最大SQLテキスト サイズは1メガバイトです。

操作の開始時にシード文のセット全体が評価された後、前の再帰処理からの行を入力値として使用して、各再帰的サイクルで再帰文のセット全体が評価されます。再帰的ビューの構築を参照してください。

一例として次のビュー定義を考えます。このビューを使用して、電車または飛行機のいずれかによってドイツのカイザルスラウテルンという都市から到着できるすべての都市を見つけます。

CREATE RECURSIVE VIEW tc (source, destination, carrier, depth) AS (
  SELECT f.source, f.destination, f.carrier, 0 AS depth 
  FROM flights AS f                                       -- Query_1
  WHERE f.source ='Kaiserslautern'
UNION ALL
   (SELECT r.source, r.destination,'EuroRail', 0 AS depth 
    FROM trains AS r                                      -- Query_2
   WHERE r.source ='Kaiserslautern'
UNION ALL
  SELECT tcq.source, f.destination, f.carrier, tcq.depth + 1 
  FROM tc AS tcq, flights AS f                          -- Query_3
  WHERE tcq.destination=f.source 
  AND   tcq.depth <= 100 
UNION ALL
  SELECT tcq.source, r.destination,'EuroRail', teq.depth + 1 
  FROM tc AS tcq, trains AS r                           -- Query_4
  WHERE tcq.destination = r.source 
  AND   tcq.depth <= 100  ) );

この例では、Query_1Query_2はどちらもシード文です。それに対し、Query_3Query_4はどちらも再帰文です。Query_1を他の3つのクエリーから分けるために使用される括弧は、実行順序を強制するためではなく、関係を明確にするためのものです。UNION ALLセット演算子は連想的であると同時に可換性があるため、再帰的クエリーの中に括弧を指定しても実行順序には影響を与えません。

tcという名前の再帰的ビューを定義したので、後は「電車または飛行機でKaiserslauternから行くことができるすべての都市を見つける」という問題に回答するために次の単純なSELECT文を実行するだけです。

    SELECT *
    FROM tc;