Ver Mensaje Individual
  #1  
Viejo 14/12/10, 10:53:39
MarianitoSAPO MarianitoSAPO is offline
Junior Member
 
Fecha de Ingreso: oct 2010
Mensajes: 7
Necesito hacer un INNER JOIN de 3 tablas eficiente

Tengo 3 tablas:

LFA1:
- lifnr (Clave)
- land1
- ...

LFB1:
- lifnr (Clave)
- bukrs (Clave)
- pernr
- ...

LFBK:
- lifnr (Clave)
- banks (Clave)
- bankl (Clave)
- bankn (Clave)
- bkont
- ...

lo que necesito es un
INNER JOIN entre LFA1 y LFB1 en lifnr
y ésta un LEFT OUTER JOIN con la LFBK en lifnr


Mi primera solución fue:
select lifnr land1 ....
from LFA1 as a INNER JOIN LFB1 as b on ....
OUTER JOIN ....
pero me dijeron que era ineficiente, que usara FOR ALL ENTRIES


entonces implementé lo siguiente:


El gran problema es que el campo lifnr
NO es clave de la tabla LFB1 por lo tanto debo
anidar un loop, y además para la condición
LEFT OUTER JOIN debo anidar otro loop
ya que lifnr tampoco es clave de LFBK.

Como imaginarán, esto tarda un poco mas que una
eternidad.

Existe una solución mas eficiente???, cuando usamos
FOR ALL ENTRIES y los campos que accedemos
no son claves (No podemos usar READ TABLE) y
por lo tanto debemos anidar loops.

Además de la ineficiencia, con la condición
LEFT OUTER JOIN se me plantéo que el APPEND
del loop mas interno debería hacer dentro
del loop si consiguió algún registro,
SINO fuera (con las campos NULL) si no consiguio
ningún registro.
Estaría bien, eso?

Saludos,
Gracias
Responder Con Cita