Directrices para usar UNION

Cuando utilice operadores UNION, siga estas directrices:

  • Todas las listas de selección de las instrucciones que se combinan con UNION deben tener el mismo número de expresiones (nombres de columna, expresiones aritméticas, funciones de agregado, etc.).

  • Las columnas correspondientes del conjunto de resultados combinado con UNION, o cualquier subconjunto de columnas que se use en consultas individuales, deben ser del mismo tipo de datos, tener la posibilidad de convertir los tipos de datos de forma implícita o suministrar una conversión explícita. Por ejemplo, no es correcto usar UNION entre una columna de tipo de datos datetime y una de tipo de datos binary, salvo si se indica un tipo de conversión explícito. Sin embargo, sí se puede usar un operador UNION entre una columna de tipo de datos money y otra de tipo de datos int, puesto que se puede realizar una conversión implícita.

    Las columnas con el tipo de datos xml deben ser equivalentes. Todas las columnas deben seguir un esquema XML o bien ninguno. Si siguen alguno, debe pertenecer a la misma colección de esquemas XML.

  • Las columnas del conjunto de resultados correspondiente de las instrucciones individuales que se combinan con UNION deben estar en el mismo orden, porque UNION compara las columnas de una en una en el orden que se indica en las consultas individuales.

    A continuación se muestra un ejemplo.

    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

     

     

    Ejecute esta consulta:

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

    El conjunto de resultados es:

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

    Cuando se combinan distintos tipos de datos en una operación UNION, se convierten con las reglas de prioridad de los tipos de datos. En el ejemplo anterior, los valores int se convierten a float porque float tiene mayor prioridad que int. Para obtener más información, vea Prioridad de tipo de datos (Transact-SQL).

    En la consulta siguiente se produce un mensaje de error porque los tipos de datos de las columnas correspondientes no son compatibles:

    SELECT b, c FROM table3
    UNION 
    SELECT a, b FROM table4
    
  • Los nombres de las columnas de la tabla que resulta de la operación UNION se toman de la primera consulta individual de la instrucción UNION. Para hacer referencia a una columna del conjunto de resultados por un nuevo nombre (por ejemplo, en una cláusula ORDER BY), debe hacerse referencia a ella de esta forma en la primera instrucción SELECT:

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