UNION 構成は、似ていない可能性がある型を1つの結果の集合になるように 合わせなければならないという点で少し異なっています。
UNION の評価
全ての結果が同一の型かどうか点検します。
UNION 句の各結果を最初の SELECT 句または対象カラムの型に合うように 強制します。
tgl=> SELECT text 'a' AS "Text" UNION SELECT 'b'; Text ---- a b (2 rows)
tgl=> SELECT 1.2 AS Float8 UNION SELECT 1; Float8 ------ 1 1.2 (2 rows)
union の型はその最初または最上位の句の型に合うように強制されます。
tgl=> SELECT 1 AS "All integers" tgl-> UNION SELECT '2.2'::float4 tgl-> UNION SELECT 3.3; All integers ------------ 1 2 3 (3 rows)
別のパーサの戦略として、その一団内の "最善" の型を選択するという方 法もできますが、これは、パーサでうまく再帰的な技術を使用することに なり、より難しいものになります。しかし、検索結果をテーブルに 格納 する時に "最善" の型が使用されています。
tgl=> CREATE TABLE ff (f float); CREATE tgl=> INSERT INTO ff tgl-> SELECT 1 tgl-> UNION SELECT '2.2'::float4 tgl-> UNION SELECT 3.3; INSERT 0 3 tgl=> SELECT f AS "Floating point" from ff; Floating point ---------------- 1 2.20000004768372 3.3 (3 rows)