17.10 - 再帰的ビューの構築 - 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
日本語 (日本)
再帰ビューの基本的な定義は、これらのコンポーネント クラスからなります。
  • 非再帰的、またはシード クエリー クラス。
  • 再帰的クエリー クラス。
  • クエリー コンポーネントを接続するためのUNION ALLセット演算子。
  • 無限の再帰処理を避けるための終了条件。

再帰的ビュー定義には複数のシード文と再帰文を含められます。

終了条件は通常、再帰文のWHERE句に明示的に指定するべきですが、これは必須ではありません。なぜなら、再帰的クエリーはユーザー スプールの領域およびシステム ディスクの領域の限界によって暗黙的に限定されるからです。

構文

CREATE RECURSIVE VIEW view_name [(column_name [,...])] AS
  (query_expression_1 UNION ALL query_expression_2)

構文要素

view_name
ビューの参照に使用される名前。
column_name
基本テーブル内の列の名前。
query_expression_1
シード文。
query_expression_2
再帰文。

以下の例は、再帰処理の概念で定義したフライトのテーブルに基づきます。

CREATE RECURSIVE VIEW reachable_from (source,destination,depth) AS (
  SELECT root.source, root.destination, 0 AS depth
  FROM flights AS root
  WHERE root.source = 'Paris'
UNION ALL
  SELECT in1.source, out1.destination, in1.depth + 1
  FROM reachable_from AS in1, flights AS out1
  WHERE in1.destination = out1.source
  AND   in1.depth <= 100);

view_nameはreachable_fromです。

基本テーブルはflightsです。ビューには、基本テーブルの列(source、destination、およびdepth)のみが表示されます。

query_expression_1は次のとおりです。

SELECT root.source, root.destination, 0 AS depth
FROM flights AS root
WHERE root.source = 'Paris'

これは、再帰ビュー定義のシード文です(ビュー定義のシード文コンポーネントを参照)。この文は、その定義のどの時点でも再帰的な関係を参照しません。

query_expression_2は次のとおりです。

SELECT in1.source,out1.destination,in1.depth + 1
FROM reachable_from AS in1, flights AS out1
WHERE in1.destination = out1.source
AND   in1.depth <=100

これは、再帰ビュー定義の再帰文です(ビュー定義の再帰文コンポーネントを参照)。再帰処理が発生するのは、ビュー名reachable_fromがこの文のFROM句で参照されているからです。