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