次の方法で共有


UNION 使用のガイドライン

UNION 演算子を使用する場合は、次のガイドラインに従ってください。

  • UNION で結合されている複数のステートメントの選択リスト内の式 (列名、算術式、集計関数など) の数は、すべて同じである必要があります。

  • UNION で結合されている結果セット内の対応する列、または個別のクエリで使用される列のすべてのサブセットは、同じデータ型であるか、2 つのデータ型間で暗黙的なデータ変換が可能であるか、または明示的な変換が指定されている必要があります。たとえば、datetime データ型の列と binary データ型の列間で UNION を使用するには、明示的な変換を指定する必要があります。ただし、money データ型の列と int データ型の列は暗黙的に変換されるので、これらの列間では UNION を使用できます。

    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 演算子で結合すると、それらのデータ型はデータ型の優先順位に関する規則に従って変換されます。上記の例では、float 型の優先順位が int 型の優先順位よりも高いので、int 型の値が float 型に変換されます。詳細については、「データ型の優先順位 (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