UNION (联合)查询
UNION 元素有些特别,因为它必须匹配一些也许不太类似的类型以生成一个唯一的结果集.
UNION 计算
-
检测标明的类型,获得所有结果.
-
使用UNION语句转换所有结果,使之与第一个 SELECT 语句或目标列匹配.
例子
待定类型
tgl=> SELECT text 'a' AS "Text" UNION SELECT 'b';
Text
------
a
b
(2 rows)
简单的 UNION
tgl=> SELECT 1.2 AS "Float8" UNION SELECT 1;
Float8
--------
1
1.2
(2 rows)
转换的 UNION
union 的类型将被强制与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)
一个可选的分析器策略是从一组数据中选择"最好"的类型,但这却难以在分析器优良的递归技术中实现.不过,"最好"的类型在使用
into
向表中插入数据时使用:
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)