Hitachi

Hitachi Advanced Data Binder SQLリファレンス


7.31.3 導出表の展開規則

導出表の導出問合せを実行する際,導出表を含まない等価な形式となるように,外側の問合せ式本体に展開されます。これを導出表の展開といいます。導出表の展開例を次に示します。

導出表を使用した問合せの例:
SELECT "PN1","PR2"*1.05 AS "TXPRICE"
   FROM (SELECT "PNAME","PRICE","PLACE" FROM "STOCK"
         WHERE "PRICE">10000)
      AS "X"("PN1","PR2","PL3")
         WHERE "PL3" IN('Alaska','Arizona') 
導出表の展開例:
SELECT "PNAME" AS "PN1","PRICE"*1.05 AS "TXPRICE" 
   FROM "STOCK" 
      WHERE "PRICE">10000 AND "PLACE" IN('Alaska','Arizona') 

導出表の展開規則を次に示します。

  1. 次に示す条件をすべて満たす場合は,内部導出表は展開されません。

    • 1SQL文中に同じビュー表が複数指定されている場合

    • そのビュー表を定義した際に,問合せ式本体中に次に示すどれかの指定がある場合

      • SELECT DISTINCT

      • 集合演算

      • 副問合せ

      • コンマ結合

      • 結合表

      • ビュー表

      • 問合せ名

      • 集合関数

      • ウィンドウ関数

      • GROUP BY

      • HAVING

      • 表関数導出表

      • アーカイブマルチチャンク表

      • WHERE

    同様に,1SQL文中に同じ問合せ名が複数指定されていて,その問合せ名のWITHリスト要素に指定した問合せ式本体に上記のどれかの指定がある場合は,内部導出表は展開されません。

  2. WITHリスト要素に再帰的問合せを指定し,その再帰的問合せの再帰的メンバ中にビュー表または問合せ名を指定している場合,そのビュー表または問合せ名に対応する内部的な導出表は展開されません。

  3. WITHリスト要素に再帰的問合せが含まれる場合,そのWITHリスト要素の問合せ名に対応する内部的な導出表は展開されません。

  4. 次の条件1または条件2のどちらかを満たすWITHリスト要素の問合せ名に対応する内部導出表は展開されません。また,CREATE VIEW文の問合せ式にWITH句を指定し,かつ問合せ式中から次のどちらかの条件を満たすWITHリスト要素の問合せ名を参照している場合,CREATE VIEW文で定義したビュー表から導出される導出表は展開されません。

    <条件1>

    次の条件をすべて満たす場合

    • WITHリスト要素を複数指定している

    • WITHリスト要素に指定した問合せ式本体に次のどれかを指定している

      • SELECT DISTINCT

      • 集合演算

      • 副問合せ

      • コンマ結合

      • 結合表

      • ビュー表

      • 問合せ名

      • 集合関数

      • ウィンドウ関数

      • GROUP BY

      • HAVING

      • 表関数導出表

      • アーカイブマルチチャンク表

    • 次のどれかの条件を満たしている

      • WITHリスト要素に対応する問合せ名を,SQL文中に2か所以上指定している

      • WITHリスト要素に対応する問合せ名を,SQL文中に1か所指定していて,かつ次のどちらかの条件を満たす副問合せにその問合せ名を指定している

        [1]外への参照列が属する表参照を指定した問合せ指定に指定された副問合せのうち,その外への参照列を指定した副問合せを含んでいる副問合せである

        [2][1]の副問合せ中に含まれる副問合せである

        (例)問合せ名Q1が上記の[2]の条件を満たす例

        [図データ]

        上記の例の場合,[1]の条件を満たす副問合せは,問合せBになります。また,[2]の条件を満たす副問合せは,問合せC~問合せEになります。一方,[1]と[2]の両方の条件を満たさない副問合せは,問合せFになります。問合せ名Q1は,問合せCに指定されているため,[2]の条件を満たします。

    <条件2>

    次の条件をすべて満たす場合

    • WITHリスト要素を1つ指定している

    • WITHリスト要素に指定した問合せ式本体中に,同じビュー表を複数指定している

      または,WITH句以外にWITHリスト要素に対応する問合せ名を複数指定している

    • WITHリスト要素に対応する問合せ名を,次のどちらかの副問合せに指定している

      [1]外への参照列が属する表参照を指定した問合せ指定に指定された副問合せのうち,その外への参照列を指定した副問合せを含んでいる副問合せである

      [2][1]の副問合せ中に含まれる副問合せである

  5. 次に示す導出表の展開は行われません。

    • CREATE VIEW文の問合せ式に指定したディクショナリ表またはシステム表から等価変換された内部導出表

    • 表値構成子によって導出された導出表

    • FULL OUTER JOINの指定によって等価変換された導出表

    • アーカイブマルチチャンク表から等価変換された導出表

      アーカイブマルチチャンク表から等価変換される導出表については,マニュアルHADB AP開発ガイドアーカイブマルチチャンク表を検索するSQL文の等価変換を参照してください。

    • OR条件の指定によって等価変換された導出表

      OR条件の指定によって等価変換された導出表については,マニュアルHADB AP開発ガイドOR条件に関する等価変換(集合演算UNION ALLを指定した導出表への等価変換)を参照してください。