©
Ce document utilise Manuel du site Web PHP chinois Libérer
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。