Linee guida per l'utilizzo dell'operatore UNION
Quando si utilizza l'operatore UNION, attenersi alle seguenti linee guida:
Tutti gli elenchi di selezione delle istruzioni combinate tramite l'operatore UNION devono includere lo stesso numero di espressioni (nomi di colonne, espressioni aritmetiche, funzioni di aggregazione e così via).
Le colonne corrispondenti dei set di risultati combinati tramite l'operatore UNION, o gli eventuali subset di colonne utilizzati nelle singole query, devono essere dello stesso tipo di dati, consentire la conversione implicita tra i due tipi di dati oppure includere un meccanismo di conversione esplicita. Un operatore UNION per la combinazione, ad esempio, di una colonna con tipo di dati datetime a una con tipo di dati binary non funzionerà a meno che non sia consentita una conversione esplicita. Un operatore UNION, tuttavia, funzionerà per la combinazione tra una colonna con tipo di dati money e una con tipo di dati int, in quanto questi tipi di dati possono essere convertiti in modo implicito.
Le colonne con tipo di dati xml devono coincidere. Per tutte le colonne è necessario eseguire la tipizzazione in uno schema XML oppure annullare la tipizzazione. Nel primo caso, le colonne devono essere tipizzate nello stesso insieme di schemi XML.
Le colonne corrispondenti dei set di risultati delle singole istruzioni combinate tramite l'operatore UNION devono essere disposte nello stesso ordine. L'operatore UNION confronta infatti le colonne una a una nell'ordine specificato nelle singole query.
Esempio:
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
Eseguire la query seguente:
SELECT a, b FROM table3 UNION SELECT b, a FROM table4
Set di risultati:
a b -------- ----- 1.000000 abc 2.000000 def 3.000000 ghi 1.000000 jkl 5.000000 mno
Quando in un'operazione UNION vengono combinati tipi di dati diversi, questi vengono convertiti in base alle regole di precedenza dei tipi di dati. Nell'esempio precedente i valori di tipo int vengono convertiti in valori di tipo float, in quanto il tipo di dati float è prioritario rispetto a int. Per ulteriori informazioni, vedere Precedenza dei tipi di dati (Transact-SQL).
La query seguente genera un messaggio di errore, in quanto i tipi di dati delle colonne corrispondenti non sono compatibili:
SELECT b, c FROM table3 UNION SELECT a, b FROM table4
I nomi delle colonne della tabella risultante dall'operazione UNION vengono ricavati dalla prima query dell'istruzione UNION. Se si desidera fare riferimento a una colonna del set di risultati in base a un nome diverso, ad esempio in una clausola ORDER BY, è necessario specificare la colonna con il nome desiderato nella prima istruzione SELECT:
SELECT city AS Cities FROM stores_west UNION SELECT city FROM stores_east ORDER BY city
Vedere anche