INNER JOIN em vez de FOR ALL ENTRIES
Há uns tempos mostrei-te que podias fazer SELECT a uma tabela interna. E no outro dia perguntei-me: se isso é possível, não será então também possível fazer INNER JOINs?
E não é que sim?
SELECT kunnr, name1
FROM kna1
INNER JOIN @itbl AS customers ON customers~kunnr = kna1~kunnr
INTO TABLE @DATA(output).
E cá está. A única coisa que tens de fazer é dar um nome à tabela fazendo @itbl AS customers
.
Isto é uma alternativa ao SELECT FOR ALL ENTRIES
. Assim de repente fico com a sensação de que o INNER JOIN
será sempre melhor mas não tenho a certeza.
Porque é que me parece melhor? Porque, de acordo com a SAP, o FOR ALL ENTRIES
executa o SELECT
para cada linha da tabela interna, correndo-o tantas vezes quantas linhas existirem na tabela interna. Já no caso do INNER JOIN
, a tabela interna é toda enviada para a base de dados de uma só vez e depois é usada como se fosse uma tabela de base de dados.
E deixas de ter o stress de o SELECT
dar asneira se a tabela interna estiver vazia.
Além disso, o FOR ALL ENTIES
tem a limitação chata de que, no WHERE
, o tipo de dados da variável tem de ser igual ao tipo de dados do campo. Por alguma razão no INNER JOIN
isso já não é necessário.
Serão mesmo só vantagens ou estará a escapar-me alguma coisa e há desvantagens?
Obrigado Silk Road Collection pela foto.
O Abapinho saúda-vos.