Requêtes UNION

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

  1. vérifie les types identiques pour tous les résultats.

  2. contraint chaque résultat provenant de clauses UNION à apparier le type de la première clause SELECT ou la colonne cible.

Exemples

Types sous-spécifiés

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

UNION simple

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

UNION transposée

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)