7.5. UNION構成要素とCASE構成要素

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

UNIONCASE の型の解決

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

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

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

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

Example 7-7. Union における指定されない型

tgl=> SELECT text 'a' AS "Text" UNION SELECT 'b';
 Text
------
 a
 b
(2 rows)

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

Example 7-8. 簡単なUNIONにおける型変換

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

リテラル 1.2numeric 型であり、整数値 1 を暗黙的に numeric 型にキャストすることができるため、この型が使用されます。

Example 7-9. 転置されたUNIONにおける型変換

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

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