使用 Union 的指導方針
在使用 UNION 運算子時請遵循下列指導方針:
使用 UNION 來合併之陳述式內的所有選取清單,都必須擁有相同數目的運算式 (資料行名稱、算術運算式、彙總函式等等)。
使用 UNION 合併之結果集內的對應資料行,或是用於個別查詢內的任何資料行子集合,都必須是相同的資料類型、且在兩個資料類型之間可進行隱含的資料轉換或提供明確的轉換。例如,除非提供明確轉換,否則 datetime 資料類型的資料行和其中一個 binary 資料類型之間的 UNION 無效。不過,UNION 在 money 資料類型的資料行和其中一個 int 資料類型之間有效,因為它們可隱含轉換。
xml 資料類型的資料行必須相等。所有資料行在 XML 結構描述中必須具類型,或不具類型。如果具類型,它們必須在相同 XML 結構描述集合中具類型。
使用 UNION 合併之個別陳述式內的對應結果集資料行必須以相同的順序出現,因為 UNION 會以個別查詢所採用的順序以一對一方式來比較資料行。
以下為一個範例。
TABLE3
TABLE4
A
B
C
A
B
INT
CHAR(4)
CHAR(4)
CHAR(4)
FLOAT
---
-------
-------
-------
-------
1
ABC
JKL
JKL
1.000
2
DEF
MNO
MNO
5.000
3
GHI
PQR
執行此查詢:
SELECT a, b FROM table3 UNION SELECT b, a FROM table4
以下為結果集:
a b -------- ----- 1.000000 abc 2.000000 def 3.000000 ghi 1.000000 jkl 5.000000 mno
當不同資料類型在 UNION 作業中結合時,會使用資料類型優先順序的規則來轉換它們。在上例中,int 值會轉換成 float,因為 float 的優先順序高於 int。如需詳細資訊,請參閱<資料類型優先順序 (Transact-SQL)>。
此查詢會產生錯誤訊息,因為對應資料行的資料類型不相容:
SELECT b, c FROM table3 UNION SELECT a, b FROM table4
資料表中因為 UNION 而產生的資料行名稱,是來自 UNION 陳述式的第一個個別查詢。若要按照新名稱來參照結果集中的資料行 (例如,在 ORDER BY 字句中),則資料行必須以第一個 SELECT 中的該方式來參照:
SELECT city AS Cities FROM stores_west UNION SELECT city FROM stores_east ORDER BY city