历史版本。 PostgreSQL 7.3 已结束支持。 请参阅 当前版本手册.
7.5. UNION 和 CASE 结构 #
UNION 结构必须把可能不相似的类型匹配起来构成单一结果集。解析算法对联合查询的每个输出列分别应用。INTERSECT 和
EXCEPT 结构用与 UNION
相同的方式解析不相似的类型。CASE 结构也使用同一算法来匹配其组成表达式并选择结果数据类型。
UNION 和 CASE 类型解析
如果所有输入都是
unknown类型,就解析为text类型(string 类别的首选类型)。否则,在选择类型时忽略unknown输入。如果非unknown输入并非全都属于同一类型分类,则失败。
选择该类别中作为首选类型的第一个非 unknown 输入类型,或者允许所有非 unknown 输入隐式强制转换到它的类型。
把所有输入强制转换为所选类型。
Examples
例 7.7. 联合中未充分指定的类型
tgl=> SELECT text 'a' AS "Text" UNION SELECT 'b'; Text ------ a b (2 rows)
这里,未知类型的字面量 'b' 会被解析成 text 类型。
例 7.8. 简单联合中的类型转换
tgl=> SELECT 1.2 AS "Numeric" UNION SELECT 1;
Numeric
---------
1
1.2
(2 rows)
字面量 1.2 是 numeric 类型,而整数值 1 可以隐式转换成
numeric,所以使用该类型。
例 7.9. 转置联合中的类型转换
tgl=> SELECT 1 AS "Real"
tgl-> UNION SELECT CAST('2.2' AS REAL);
Real
------
1
2.2
(2 rows)
这里,由于 real 类型不能隐式转换成 integer,但 integer 可以隐式转换成 real,union 的结果类型被解析为 real。