Hola Prasad,
El inner join es como la intersección, lo que significa que todas las condiciones deben ser verdaderas para que un registro sea incluido. Todas las condiciones se unen por 'y'. El outer join es la unión, donde los registros se unen por 'o'. No estoy seguro acerca del extractor que estás creando. ¿Es un extractor de datos genérico? Si es así, tienes la opción de usar una vista que se crearía en el diccionario de datos, y en ese caso no puedes agregar lógica como la que tienes en tu código. No intentaría poner las 12 selecciones en una sola consulta usando joins, sacaría los datos en tablas internas usando fetches de array (usa la cláusula for all entries), recorrería las tablas internas y escribiría en una tabla de salida. Intentar unir demasiadas tablas complica demasiado el problema en mi opinión.
-
-
Los datos que se pueden seleccionar con una vista dependen principalmente de si la vista implementa un inner join o un outer join. Con un inner join, solo obtienes los registros del producto cruzado para los cuales hay una entrada en todas las tablas utilizadas en la vista. Con un outer join, también se seleccionan registros para los cuales no hay una entrada en algunas de las tablas utilizadas en la vista. El conjunto de resultados determinado por un inner join puede ser, por lo tanto, un subconjunto de los resultados determinados con un outer join.
Ejemplo de Inner join:
SELECT A
EBELN A
LIFNR A
KNUMV B
EBELP B
NETWR B
NETPR B
WERKS B
MATNR
L
NAME1 L
NAME2
FROM EKKO AS A
INNER JOIN EKPO AS B ON A
EBELN = B
EBELN
INNER JOIN LFA1 AS L ON L
LIFNR = A
LIFNR
INTO CORRESPONDING FIELDS OF TABLE itab
WHERE B~BUKRS = 'código de la empresa' .
Left outer join
Por lo general, al definir InfoSets, los objetos se vinculan a través de operadores de inner join. Sin embargo, también puedes usar left outer joins. El inner join y el left outer join solo difieren en la situación en la que una de las tablas involucradas no contiene ningún registro adecuado que cumpla las condiciones de unión.
Con un inner join (tabla 1 inner join tabla 2), ningún registro se incluye en el conjunto de resultados en este caso. Sin embargo, esto significa que el registro correspondiente de la tabla 1 no se considera en el conjunto de resultados.
Con un left outer join (tabla 1 left outer join tabla2), exactamente un registro se incluye en el conjunto de resultados en este caso. En este registro, los campos de la tabla 1 contienen los valores del registro de la tabla 1 y los campos de la tabla 2 están todos llenos con el valor inicial.
Ejemplo de left outer join:
DATA: CUSTOMER TYPE SCUSTOM,
BOOKING TYPE SBOOK.
SELECT SCUSTOM
NAME SCUSTOM
POSTCODE SCUSTOM~CITY
SBOOK
FLDATE SBOOK
CARRID SBOOK
CONNID SBOOK
BOOKID
INTO (CUSTOMER-NAME, CUSTOMER-POSTCODE, CUSTOMER-CITY,
BOOKING-FLDATE, BOOKING-CARRID, BOOKING-CONNID,
BOOKING-BOOKID)
FROM SCUSTOM LEFT OUTER JOIN SBOOK
ON SCUSTOM
ID = SBOOK
CUSTOMID AND
SBOOK~FLDATE = '20081015'
ORDER BY SCUSTOM
NAME SBOOK
FLDATE.
WRITE: / CUSTOMER-NAME, CUSTOMER-POSTCODE, CUSTOMER-CITY,
BOOKING-FLDATE, BOOKING-CARRID, BOOKING-CONNID,
BOOKING-BOOKID.
ENDSELECT.
-
-
Sintaxis SQL para los Joins.
INNER JOIN: Recupera clientes con pedidos solamente. Por ejemplo, quieres determinar la cantidad pedida por cada cliente y solo quieres ver aquellos que han pedido algo.
SELECT Customers.
, Orders.
FROM Customers INNER JOIN Orders ON Customers.CustomerID =
Orders