Sintaxis
… { [INNER] JOIN }|{ LEFT|RIGHT OUTER JOIN }|{ CROSS JOIN }
data_source [ON cond_expr] …
Efecto
Define una unión entre dos fuentes de datos de una vista CDS. El código anterior es parte de la sintaxis de una fuente de datos data_source y contiene la sintaxis recursiva de una fuente de datos data_source.
En una expresión que usa INNER y OUTER, se debe especificar una condición cond_expr después de ON. No se puede especificar una condición ON para una expresión de unión usando CROSS.
Inner Join, Outer Join y Cross Join son posibles cuando:
- Una combinación entre dos fuentes de datos usando INNER JOIN o simplemente JOIN selecciona todas las entradas de las fuentes de datos cuyos campos cumplen con la condición ON.
- Una combinación entre dos fuentes de datos usando LEFT OUTER JOIN selecciona todas las entradas en el lado izquierdo.
- Una combinación entre dos fuentes de datos utilizando RIGHT OUTER JOIN selecciona todas las entradas en el lado derecho. Las entradas que cumplen con la condición del ON, tienen el mismo contenido que en la unión interna. En las entradas que no cumplen la condición del ON, los elementos del lado derecho o izquierdo tienen el valor nulo que se establece en un valor inicial compatible con el tipo cuando la vista CDS se utiliza en Open SQL.
- Cuando se unen dos fuentes de datos usando CROSS JOIN, se produce su producto cruzado. Todas las entradas en el lado izquierdo se combinan con todas las entradas en el lado derecho. El número de filas en el conjunto de resultados es el número de filas en el lado izquierdo multiplicado por el número de filas en el lado derecho.
Las expresiones de unión anidadas se evalúan en el siguiente orden:
En el caso de INNER y OUTER JOIN, mediante la disposición de las condiciones ON. De izquierda a derecha, las condiciones de ON más adyacentes se asignan a cada JOIN y esta expresión entre paréntesis implícitamente.
De manera predeterminada, las combinaciones CROSS se evalúan de izquierda a derecha. La prioridad de la evaluación puede estar influenciada por paréntesis.
Si se combinan varias combinaciones CROSS, el orden de la evaluación es irrelevante. El resultado es siempre el mismo y el número de filas es el producto de la cantidad de filas de todas las fuentes de datos involucradas.
Si las uniones CROSS se combinan con INNER y OUTER JOIN, el resultado puede depender del orden de evaluación o de los paréntesis.
Ejemplo práctico
Para esta lección creamos el CDS con el nombre ZB_02_GVALER y el nombre ZVB_02_GVALER en la anotación @AbapCatalog.sqlViewName para la vista del diccionario de datos. Como fuente de datos utilizamos las tablas de base de datos estándar MARA y MARC. El CDS contendrá los elementos Material (MARA-MATNR) y Plant (MARC-WERKS) y devolverá todos los materiales que corresponderán a un centro que se especifica como parámetro.
Procedimiento de implementación
- En Eclipse creamos el objeto CDS en nuestro paquete de desarrollo e implementamos el siguiente código:
- Realizamos un test con la opción Data Preview.