Union ALL / Distinct

  • Sintaxis

SELECT query_clauses
    UNION [ALL|DISTINCT]
[(] SELECT query_clauses [)]     [UNION [ALL|DISTINCT]
…] [ORDER BY sort_key]     INTO|APPENDING target
[additional_options].

  • Efecto

El elemento UNION del lenguaje Open SQL une los conjuntos de resultados de varias consultas. Las filas del conjunto de resultados de la consulta después de UNION se insertan en el conjunto de resultados de la consulta antes de UNION. Una consulta en el lado derecho de UNION se puede incluir entre paréntesis (). El paréntesis puede incluir múltiples uniones. Las consultas unidas con UNION se evalúan de izquierda a derecha y los enunciados específicos se pueden priorizar usando paréntesis. Las prioridades que usan paréntesis son particularmente aplicables cuando se manejan filas duplicadas usando DISTINCT.

  • Notas

Cláusula ORDER BY

  • La adición de ORDER BY PRIMARY KEY no está permitida.
  • Las columnas del conjunto de resultados de unión especificado después de ORDER BY deben aparecer con el mismo nombre en todas las sentencias SELECT relevantes. Los nombres se deben especificar directamente y no se pueden especificar con el selector de columna ~ después de un nombre de columna.

Cláusula INTO

  • Si se utiliza la adición CORRESPONDING o una declaración en línea @DATA (…) en la cláusula INTO, los nombres de las columnas de todos los conjuntos de resultados definidos en la query_clauses de izquierda a derecha deben coincidir.
  • El conjunto de resultados de la unión siempre son registros múltiples. Al realizar una asignación a un objetivo no similar a una tabla interna (es decir, una instrucción SELECT sin la adición INTO | APPENDING … TABLE) está obligado a cerrar el bucle cerrado ENDSELECT.

Adiciones opcionales

  • La adición de UP TO n ROWS no está permitida.

SAP buffering

  • Cuando se utiliza UNION, Open SQL omite el almacenamiento en búfer SAP.

 

  • Adición ALL | DISTINCT

Las adiciones ALL y DISTINCT especifican cómo se manejan las filas duplicadas. Si no se especifica ninguna adición con el UNION el sistema utiliza el valor predeterminado DISTINCT.
Si se especifica ALL todas las filas del conjunto de resultados de la declaración SELECT se insertan en el conjunto de resultados existente.
Si se especifica la adición DISTINCT o si no se especifica ninguna de las dos adiciones, las filas del conjunto de resultados de la declaración SELECT se insertan en el conjunto de resultados existente. De las filas duplicadas se queda sólo una y las demás se eliminan.
El comportamiento predeterminado o la adición DISTINCT siempre se aplican al conjunto completo de resultados existente. La adición DISTINCT también elimina cualquier fila duplicada producida por la suma ALL de precedente

  • Ejemplo práctico

En la transacción del diccionario de datos SE11 creamos dos tablas de base de datos asignándole los nombres ZINT_PRODUCTS y ZEXT_PRODUCTS. Las dos tablas van a contener los siguientes componentes:

  • MANDT con el elemento de datos MANDT
  • PRODUCT_ID con el elemento de datos CHAR2
  • DESCRIPTION con el elemento de datos CHAR100


Utilizamos el siguiente código para insertar valores en las tablas creadas.



En un programa ejecutable realizamos una lectura con UNION para leer los registros distintos de las tablas en una única instrucción SELECT.  Por último, mostramos los resultados del SELECT en una ventana utilizando el método estático DISPLAY de la clase CL_DEMO_OUTPUT.

Al ejecutar obtenemos el siguiente resultado:
Para obtener todos los productos hay que utilizar UNION ALL.

Con el siguiente resultado:
La expresión UNION se puede utilizar para realizar la unión de más de dos tablas. Para establecer las prioridades del UNION se utilizan paréntesis.

Como podemos ver el elemento UNION del lenguaje Open SQL une los conjuntos de resultados de varias consultas.
 
 
 
 

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *