La construcción UNION es algo diferente en cuanto que es más posible el que haya tipos distintos en un resultado.
Evaluación de UNION
Comprueba si los tipos son indenticos para todos los resultados.
Convierte cada resultado de la clausula UNION para ajustarlo al tipo de la primera clausula SELECT o de la columna de resultado.
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)
Los tipos del UNION son forzados a ajustarse a los tipos de la primera clausula en el 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)
Una estrategia alternativa del analizador podría ser escoger el "mejor" tipo del grupo, pero esto es más dificil debido a la técnica recursiva usada en el analizador. De cualquier modo, se usa el "mejor" tipo cuando hacemos una selección dentro de una tabla:
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)