10.5. UNIONCASEARRAY构造

SQL 的 UNION 构造必须把那些可能不太相似的类型匹配起来成为一个结果集。 解析算法分别应用于联合查询的每个输出字段。 INTERSETEXCEPT构造对不相似的类型使用和 UNION相同的算法进行解析。 CASEARRAY 构造也使用同样的算法匹配它的部件表达式并且选择一个结果数据类型。

UNIONCASEARRAY 类型解析

  1. 如果所有输入都是类型 unknown,解析成类型text(字串类型的首选类型)。 否则,在选择结果类型的时候忽略 unknown 输入。

  2. 如果非 unknown 输入不是全部属于一个类型范畴,失败。

  3. 选取第一个属于该范畴中首选类型的非未知输入类型, 或者是第一个允许所有非未知输入隐含转换成它的类型。

  4. 把所有输入转换成所选类型。

下面是一些例子。

Example 10-7. Union 中的待定类型解析

SELECT text 'a' AS "Text" UNION SELECT 'b';

 Text
------
 a
 b
(2 rows)

这里,未知类型文本'b'将被解析成类型text

Example 10-8. 简单 Union 中的类型解析

SELECT 1.2 AS "numeric" UNION SELECT 1;

 numeric
---------
       1
     1.2
(2 rows)

文本 1.2 类型为 numeric, 而且整数1可以隐含地转换为numeric, 因此使用这个类型。

Example 10-9. 转置 Union 中的类型解析

SELECT 1 AS "real" UNION SELECT CAST('2.2' AS REAL);

 real
------
    1
  2.2
(2 rows)

这里,因为类型 real 不能被隐含转换成 integer, 但是 integer 可以隐含转换成 real,那么联合的结果类型分析成 real