5.5. UNION と CASE 構築子

UNION と CASE 構築子は、単一の結果集合となるためには、似ていない可能性が ある型と適合しなければなりません。解決アルゴリズムは UNION のそれぞれの 出力に別々に適応されます。CASE は、結果の式を適合するために、同一のアルゴリズム を使います。

UNION と CASE 型評価

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

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

  3. 一つ以上の unknown ではない入力値がそのカテゴリの好ましい型だった場合、 その型として解決します。

  4. そうでなければ、最初の unknown ではない入力値の型として解決されます。

  5. 全ての入力値を選択された型に強制します。

5.5.1. 例

5.5.1.1. 指定されない型

tgl=> SELECT text 'a' AS "Text" UNION SELECT 'b';
 Text
------
 a
 b
(2 rows)
ここでは、unknown 型のリテラル 'b' が text 型として解釈されます。

5.5.1.2. 簡単な UNION

tgl=> SELECT 1.2 AS "Double" UNION SELECT 1;
 Double
--------
      1
    1.2
(2 rows)

5.5.1.3. 転置された UNION

ここでは union の出力型はその union の最初/頂点の句の型に 合うよう強制されます。

tgl=> SELECT 1 AS "All integers"
tgl-> UNION SELECT CAST('2.2' AS REAL);
 All integers
--------------
            1
            2
(2 rows)

REAL は好ましい型ではないため、パーサがINTEGER ( 1 は整数です)ではなくそれを選ぶ理由は何もなく、代わりに 最初の代替を使うというルールが適用されます。 この例は好ましい型のメカニズムは、我々が望むほど多くの情報 はコード化していないということを表しています。将来の Postgresバージョンではもっと一般的な 型優先の考え方がサポートされるかもしれません。