共用方式為


使用 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
    

請參閱

概念

使用 UNION 合併結果集
使用 UNION、EXCEPT 和 INTERSECT 搭配其他 Transact-SQL 陳述式

其他資源

UNION (Transact-SQL)

說明及資訊

取得 SQL Server 2005 協助