↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

受支持版本: 当前版本 (18) / 17 / 16 / 15 / 14
测试与开发版本: 19 / devel
不受支持的版本: 13 / 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3 / 7.2 / 7.1
历史版本PostgreSQL 7.3 已于 2007 年 11 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本。

7.5. UNION 和 CASE 结构 #

UNION 结构必须把可能不相似的类型匹配起来 构成单一结果集。解析算法对联合查询的 每个输出列分别应用。INTERSECT 和 EXCEPT 结构用与 UNION 相同的方式解析不相似的类型。 CASE 结构也使用同一算法来匹配其 组成表达式并选择结果数据类型。

UNION 和 CASE 类型解析

  1. 如果所有输入都是 unknown 类型,就解析为 text 类型(string 类别的首选类型)。 否则,在选择类型时忽略 unknown 输入。

  2. 如果非unknown输入并非全都属于同一类型分类,则失败。

  3. 选择该类别中作为首选类型的第一个非 unknown 输入类型, 或者允许所有非 unknown 输入隐式 强制转换到它的类型。

  4. 把所有输入强制转换为所选类型。

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。


提交更正

译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。