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