10.5. UNIONCASEおよびARRAY構文

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

UNIONCASEおよびARRAYの型解決

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

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

  3. 最初のunknownではない入力データ型を選択します。 このデータ型は、そのカテゴリの好ましい型であるか、もしくはすべてのunknownではない入力値を暗黙的にこのデータ型に型変換することを可能にします。

  4. すべての入力値を選択された型に変換します。

以下に例を示します。

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

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

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

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

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

SELECT 1.2 AS "numeric" UNION SELECT 1;

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

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

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

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

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

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