Olá Prasad,
O inner join é como a interseção, o que significa que todas as condições devem ser verdadeiras para que um registro seja incluído. Todas as condições são unidas por 'e'. O outer join é a união, onde os registros são unidos por 'ou'. Não tenho certeza sobre o extractor que você está criando. É um extractor de dados genérico? Se sim, você tem a opção de usar uma vista que seria criada no dicionário de dados, e nesse caso não pode adicionar lógica como a que você tem em seu código. Não tentaria colocar as 12 seleções em uma única consulta usando joins, extrairia os dados em tabelas internas usando fetches de array (use a cláusula for all entries), percorreria as tabelas internas e escreveria em uma tabela de saída. Tentar unir muitas tabelas complica demais o problema, na minha opinião.
-
-
Os dados que podem ser selecionados com uma vista dependem principalmente se a vista implementa um inner join ou um outer join. Com um inner join, você obtém apenas os registros do produto cruzado para os quais há uma entrada em todas as tabelas usadas na vista. Com um outer join, também são selecionados registros para os quais não há uma entrada em algumas das tabelas usadas na vista. O conjunto de resultados determinado por um inner join pode ser, portanto, um subconjunto dos resultados determinados com um outer join.
Exemplo 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 da empresa' .
Left outer join
Geralmente, ao definir InfoSets, os objetos são vinculados através de operadores de inner join. No entanto, você também pode usar left outer joins. O inner join e o left outer join diferem apenas na situação em que uma das tabelas envolvidas não contém nenhum registro adequado que atenda às condições de união.
Com um inner join (tabela 1 inner join tabela 2), nenhum registro é incluído no conjunto de resultados neste caso. No entanto, isso significa que o registro correspondente da tabela 1 não é considerado no conjunto de resultados.
Com um left outer join (tabela 1 left outer join tabela2), exatamente um registro é incluído no conjunto de resultados neste caso. Neste registro, os campos da tabela 1 contêm os valores do registro da tabela 1 e os campos da tabela 2 estão todos preenchidos com o valor inicial.
Exemplo 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.
-
-
Sintaxe SQL para os Joins.
INNER JOIN: Recupera clientes com pedidos apenas. Por exemplo, você deseja determinar a quantidade pedida por cada cliente e só quer ver aqueles que pediram algo.
SELECT Customers.
, Orders.
FROM Customers INNER JOIN Orders ON Customers.CustomerID =
Orders