17.05 - 例: 選択リストに複数列CASE式を持つ結合インデックスの作成 - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQLデータ定義言語 構文規則および例

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

この例では、例: 選択リストにPERIOD列を持つ結合インデックスの作成で定義した表t1および次のテーブルを使用して、選択リストに複数列CASE式を持つ結合インデックスを作成します。

     CREATE TABLE t2 (
       a2 INTEGER,
       b2 INTEGER,
       c2 INTEGER,
       d2 PERIOD(DATE),
       e2 DATE,
       f2 CHARACTER(100))
     UNIQUE INDEX(b2);
     CREATE TABLE t3 (
       a3 INTEGER,
       b3 INTEGER,
       c3 INTEGER);
     CREATE JOIN INDEX ji_case AS 
       SELECT a1,b1,c1,CASE 
                         WHEN t1.b1=t2.b2 
                         THEN t2.a2 
                         ELSE t3.a3 
                       END AS a
       FROM t1,t2,t3 
       WHERE a1=a2 
       AND a2=a3;

次にji_caseに対してHELP JOIN INDEXリクエストを実行すると、Vantageは次のようなレポートを返します。

     HELP JOIN INDEX ji_case;
*** Help information returned. 3 rows.
*** Total elapsed time was 1 second.
Column Name                Type      Comment
-------------------------- --------- ---------------------
a1                         I         ?
b1                         I         ?
c1                         I         ?
a                          I         ?

例: 選択リストにBEGIN範囲関数を持つ結合インデックスの作成の列bで実行したように、この例の列aを使用して同じ問合わせ式を結合インデックスにマップできます。

結合インデックス定義での複数列式は、その保守に影響します。ji_caseの場合、列aの値はt1.b1、t2.a2、t2.b2、およびt3.a3に応じて異なります。このため、これらの列のいずれかが更新された場合には常に結合インデックスの保守が必要であり、結合インデックスの更新には式を解決するスプール ファイルが使用されます。例えば次のリクエストのような、基本テーブルt1に対する単純な更新は、削除条件a1=10を結合インデックスに直接評価できたとしても、ji_caseに対する直接の更新にマップすることができません。

     UPDATE t1 
       SET b1=10 
       WHERE a1=10;