★PostgreSQLカンファレンス2024 12月6日開催/チケット販売中★
他のバージョンの文書 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9.6 | 9.5 | 9.4 | 9.3 | 9.2 | 9.1 | 9.0 | 8.4 | 8.3 | 8.2 | 8.1 | 8.0 | 7.4 | 7.3 | 7.2

10.5. UNIONCASEおよびARRAY構文

UNION SQL構文は、似ていない可能性がある型を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型として解決されます。