無料スクリプト配布のPHP.TO   PHPの実用的なtips PHPマニュアル MySQLマニュアル Apacheマニュアル PostgreSQLマニュアル マニュアル検索    

10.5. UNION CASE および関連する構文

UNION SQL構文は、似ていない可能性がある型を1つの検索結果になるように適合させなければなりません。 解決アルゴリズムは1つのunion問い合わせの出力列ごとに適用されます。 INTERSECT 構文と EXCEPT 構文は、 UNION と同じ方法で、似ていない可能性がある型の解決を行います。 CASE 構文と ARRAY 構文、 VALUES GREATEST LEAST もまた、同一のアルゴリズムを使用して、その要素式を適合させ、結果のデータ型を選択します。

UNION CASE および関連する構文の型解決

  1. もし全ての入力値が同一型だった場合、 unknown にはならず、その型として解決されます。 そうでない場合は、リスト内のドメイン型を背後にある基本型で置換します。

  2. もし全ての入力値が unknown 型だった場合、 text 型(文字列カテゴリの好ましい型)として解決されます。 そうでない場合は unknown 入力は無視します。

  3. もしunknownではない入力値が全て同じ型カテゴリでなければ失敗します。

  4. 最初のunknownではない入力データ型を選択します。 もし存在すれば、このデータ型はそのカテゴリの好ましい型です。

  5. さもなくば、すべての先行する非unknownの入力値を暗黙的に変換させることができる、最後のunknownではない入力型を選択します。 (少なくともリストの先頭の型はこの条件を満たす必要がありますので、常にこのような型は存在します。)

  6. 全ての入力値を選択された型に変換します。 指定された入力から選択された型への変換が存在しない場合は失敗します。

以下に例を示します。

例 10-8. Unionにおける指定された型の型解決

SELECT text 'a' AS "text" UNION SELECT 'b';

 text
------
 a
 b
(2 rows)

ここで、unknown型のリテラル 'b' text へと解決されます。

例 10-9. 簡単なUnionにおける型解決

SELECT 1.2 AS "numeric" UNION SELECT 1;

 numeric
---------
       1
     1.2
(2 rows)

numeric 型のリテラル 1.2 integer 型の値 1 は、暗黙的に numeric にキャスト可能です。 したがって、この型が使用されます。

例 10-10. 転置されたUNIONにおける型解決

SELECT 1 AS "real" UNION SELECT CAST('2.2' AS REAL);

 real
------
    1
  2.2
(2 rows)

ここで、 real 型を暗黙的に integer 型にキャストすることはできませんが、 integer 型を暗黙的に real 型にキャストすることはできるため、UNIONの結果データ型は real 型として解決されます。


powered by SEO.CUG.NET