©
This document uses PHP Chinese website manual Release
SQLUNION结构必须匹配可能不同的类型成为一个单一的结果设置。
该解决算法分别应用到一个关联查询的每个输出列。
INTERSECT和EXCEPT结构在同一路径中像UNION一样决定不同的类型。
CASE, ARRAY, VALUES,GREATEST
和LEAST
结构使用相同的算法来匹配构成的表达式和查询一个结果数据类型。
UNION, CASE,和相关构造的类型分析
如果所有的输入为相同格式,并且是未知类型,那么解决该类型。 否则,用它们的底层基本类型取代在列表中的任何域类型。
如果所有的输入为unknown类型,决定作为text(字符分类的优先格式)类型。 否则,未知输入是被忽略的。
如果非未知输入不为所有的相同类型分类,那么将失败。
如果有的话,选择第一个在分类中首选的非未知输入类型。
否则,选择最后的非未知输入类型,它允许所有在非未知输入之前隐含地转换为它。 (总有这样的一种类型,因为最总在列表中的第一个类型必须满足该条件。)
转换所有的输入为选定的类型。如果没有一个从所给输入到选定类型的转换将会失败。
下面是一些例子。
Example 10-7. 在一个关联中使用规定中的类型的类型解析
SELECT text 'a' AS "text" UNION SELECT 'b'; text ------ a b (2 rows)
这里,未知类型文字'b'将被作为text类型来处理。
Example 10-8. 在一个简单关联中的类型解析
SELECT 1.2 AS "numeric" UNION SELECT 1; numeric --------- 1 1.2 (2 rows)
文字1.2是numeric类型,且integer值1 可以隐含地转换为numeric,因此使用那种类型。
Example 10-9. 在一个可换位关联中的类型解析
SELECT 1 AS "real" UNION SELECT CAST('2.2' AS REAL); real ------ 1 2.2 (2 rows)
这里,因为real类型不能隐含地转换为integer,但是integer 能隐含地转换为real,所以关联结果类型将作为real。