Freigeben über


Richtlinien für das Verwenden von UNION-Operatoren

Für das Verwenden von UNION-Operatoren gelten folgende Richtlinien:

  • Alle Auswahllisten in den mit UNION kombinierten Anweisungen müssen über dieselbe Anzahl von Ausdrücken (Spaltennamen, arithmetische Ausdrücke, Aggregatfunktionen usw.) verfügen.

  • Die einander entsprechenden Spalten in den mit UNION kombinierten Resultsets bzw. die in einer einzelnen Abfrage verwendeten Spalten einer Teilmenge müssen denselben Datentyp aufweisen, oder es muss eine implizite Datenkonvertierung zwischen den beiden Datentypen möglich sein bzw. eine explizite Datenkonvertierung angegeben werden. Beispielsweise funktioniert ein UNION-Operator zwischen einer datetime-Datentypspalte und einer binary-Datentypspalte nur, wenn eine explizite Konvertierung angegeben wird. Ein UNION-Operator funktioniert jedoch zwischen einer money-Datentypspalte und einer int-Datentypspalte, da diese implizit konvertiert werden können.

    Spalten, die dem xml-Datentyp angehören, müssen äquivalent sein. Alle Spalten müssen entweder für ein XML-Schema typisiert, oder gar nicht typisiert sein. Wenn sie jedoch typisiert sind, müssen sie für dieselbe XML-Schemaauflistung typisiert sein.

  • Einander entsprechende Resultsetspalten in den einzelnen Anweisungen, die mit UNION kombiniert werden sollen, müssen in derselben Reihenfolge vorliegen, da UNION die Spalten eins-zu-eins in der Reihenfolge vergleicht, in der die Spalten in den einzelnen Abfragen vorliegen.

    Beispiel:

    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

     

     

    Führen Sie die folgende Abfrage aus:

    SELECT a, b FROM table3
    UNION 
    SELECT b, a FROM table4
    

    Im Folgenden wird das Resultset aufgeführt:

    a          b
    --------   -----
    1.000000   abc
    2.000000   def
    3.000000   ghi
    1.000000   jkl
    5.000000   mno
    

    Werden bei einem UNION-Vorgang verschiedene Datentypen kombiniert, werden sie unter Berücksichtigung der Regeln für die Rangfolge von Datentypen konvertiert. Im vorausgegangenen Beispiel werden die int-Werte in float-Werte konvertiert, da float gegenüber int Vorrang besitzt. Weitere Informationen finden Sie unter Rangfolge der Datentypen (Transact-SQL).

    Die folgende Abfrage verursacht eine Fehlermeldung, da die Datentypen der einander entsprechenden Spalten nicht kompatibel sind:

    SELECT b, c FROM table3
    UNION 
    SELECT a, b FROM table4
    
  • Die Spaltennamen der Tabelle, die sich aus dem UNION-Vorgang ergeben, werden aus der ersten Einzelabfrage der UNION-Anweisung übernommen. Um auf eine Spalte im Resultset mit einem neuen Namen zu verweisen (z. B. in einer ORDER BY-Klausel), muss der neue Name der Spalte bereits in der ersten SELECT-Anweisung verwendet werden:

    SELECT city AS Cities FROM stores_west
    UNION 
    SELECT city FROM stores_east
    ORDER BY city