La construction UNION est quelque peu différente en ce qu'elle doit assortir des types probablement différents pour devenir un résultat simple.
Évaluation UNION
vérifie les types identiques pour tous les résultats.
contraint chaque résultat provenant de clauses UNION à apparier le type de la première clause SELECT ou la colonne cible.
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) |
les types de l'union sont forcés pour apparier les types de clause first/top dans l'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) |
Une autre stratégie du parser peut être de choisir le "meilleur" type de regroupement, mais c'est plus difficile à cause de la délicate technique de récursion utilisée par le parser. Cependant, le "meilleur" type est utilisé en sélectionnant into dans une table :
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) |