Where句でのドット表記法の使用 - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - JSONデータ型

Product
Advanced SQL Engine
Teradata Database
Release Number
17.05
17.00
Published
2020年9月
Language
日本語
Last Update
2021-03-30
dita:mapPath
ja-JP/gzn1554761068186.ditamap
dita:ditavalPath
ja-JP/gzn1554761068186.ditaval
dita:id
evi1472243742653
Product Category
Software
Teradata Vantage

ドット表記クエリーによって取得される結果のリストは、WHERE句で単一オペランドと比較できます。WHERE句の条件ごとにドット表記クエリー1つのみが許可されます。1つの条件に複数のドット表記クエリーが含まれる場合は、それぞれが単一の結果に対して評価される必要があります。そうしないと比較は無効になり、もし暗黙的な変換に失敗すると実行時にエラーが発生し該当するエラー文字列が表示される原因になります。

デフォルトの戻り値は、他のSQL句にある他のドット表記クエリーから変更されません。文字データから比較の実行に必要な何らかのデータ型に変換する処理は暗黙的に行なわれ、結果のリストの場合は、その処理がリストに含まれる項目ごとに個別に発生します。

ドット表記は、WHERE句の条件でより大きな式の一部として使用できます。結果のリストが返されるとき、個別の項目が渡され、条件の評価の前に残りの式によって評価されます。

WHERE句のリストにある各項目でこの処理を行なうには、ANY/SOME/ALL SQL演算子が次のようにオーバーロードされます。
  • ANY/SOMEがドット表記クエリーに範囲を設ける場合、すべての結果が他のオペランドと比較され、ANYの比較結果がtrueの場合、条件はtrueと評価されます。 例:
    SELECT 1 WHERE 1 >= ANY(NEW JSON('{"a":1, "a":2}')..a);

    結果は1です。

  • ALLがドット表記クエリーに範囲を設ける場合、すべての結果が他のオペランドと比較され、ALLの比較結果がtrueの場合、条件はtrueと評価されます。 例:
    SELECT 1 WHERE 2 >= ALL(NEW JSON('{"a":1, "a":2}')..a);

    結果は1です。

  • ドット表記クエリーに範囲を設けるANY、SOME、ALLのいずれもない場合は、結果のリストが他のオペランドと比較されます。 例:
    SELECT 1 WHERE '[1,2]' = NEW JSON('{"a":1, "a":2}')..a;

    結果は1です。

  • メソッド スタイル構文を使用すると、結果のリストが他のオペランドと比較されます。 例:
    SELECT 1 WHERE '[1,2]' = NEW JSON('{"a":1, "a":2}').JSONExtractValue('$..a','list');

    結果は1です。

これらのルールは、データ型を問わずすべてのドット表記クエリーに適用されます。この細分化された評価が望ましくない場合は、ANY/SOME/ALL句を条件から省略するかまたはメソッド スタイルの構文を使用することでリスト全体の比較を実行できます。

列参照は、現在のデータベース内のテーブル、またはクエリー内のテーブルにのみ適用できます。列をデータベース レベルに修飾しようとすると、エラーが表示されます。例えば、次のクエリーは失敗します。
SELECT jsonCol02.customer 
FROM jsonEnhancedDotNotationTbl
WHERE 'disk' = ANY(databasename.jsonEnhancedDotNotationTbl.jsonCol02.items..name);
結果:
*** Failure 3807 Object 'databasename' does not exist.