历史版本。 PostgreSQL 7.1 已结束支持。 请参阅 当前版本手册.
5.5. UNION 和 CASE 结构 #
UNION 和 CASE 结构必须把可能不相似的类型匹配起来构成单一结果集。解析算法对 UNION 的每个输出列分别应用。CASE 用同一算法匹配其结果表达式。
UNION 和 CASE 类型解析
如果所有输入都是
unknown类型,就解析为text类型(string 类别的首选类型)。否则,在选择类型时忽略unknown输入。如果非unknown输入并非全都属于同一类型分类,则失败。
如果一个或多个非 unknown 输入是该类别中的首选类型,就解析为该类型。
否则,解析为第一个非 unknown 输入的类型。
把所有输入强制转换为所选类型。
5.5.1. 示例
5.5.1.1. 未充分指定的类型
tgl=> SELECT text 'a' AS "Text" UNION SELECT 'b'; Text ------ a b (2 rows)
这里,未知类型的字面量 'b' 会被解析成 text 类型。
5.5.1.2. 简单 UNION
tgl=> SELECT 1.2 AS "Double" UNION SELECT 1;
Double
--------
1
1.2
(2 rows)5.5.1.3. 转置 UNION
这里 union 的输出类型被强制匹配 union 中第一个/顶端子句的类型:
tgl=> SELECT 1 AS "All integers"
tgl-> UNION SELECT CAST('2.2' AS REAL);
All integers
--------------
1
2
(2 rows)由于 REAL 不是首选类型,解析器找不到选它而不选 INTEGER(也就是 1 的类型)的理由,于是退回到使用第一个备选的规则。这个例子说明首选类型机制并没有编码我们希望的那样多的信息。Postgres
的未来版本可能支持更一般的类型偏好概念。