|
5.6. UNION 和 CASE 构造SQL 的 UNION 和 CASE 构造必须把那些可能不太相似的类型匹配起来成为一个结果集. 解析算法分别应用于 UNION 查询的每个输出字段. INTERSET 和 EXCEPT 构造对不相似的类型使用和 UNION 相同的算法进行解析. CASE 构造也使用同样的算法 匹配它的部件表达式并且选择一个结果数据类型. UNION 和 CASE 类型解析
例子Example 5-7. Union 中的待定类型
tgl=> SELECT text 'a' AS "Text" UNION SELECT 'b'; Text ------ a b (2 rows) 这里,unknown 类型文本 'b' 将被解析成类型 text. Example 5-8. 简单 Union 中的类型转换
tgl=> SELECT 1.2 AS "Double" UNION SELECT 1; Double -------- 1 1.2 (2 rows) 文本 1.2 类型为 double precision , 数值表的优选类型,因此使用这个类型. Example 5-9. 转换的 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 就是这种类型), 并最后落到选用第一个候选项的规则上. 这个例子证明了优选类型机制并不象我们想象得那样编码了足够的信息. 以后的 PostgreSQL 版本可能支持一个更通用的 类型优选的语法. |