PDA

Ver la Versión Completa : Optimizar Select


acontreras
06/01/09, 11:12:20
Miren en el trabajo me pidieron optimizar unos select reemplazando los for all entries por unos inner join. Tengo dudas en como utilizar el inner join y que datos poner en el select en vez de *. El código es el siguiente:

SELECT * INTO CORRESPONDING FIELDS OF TABLE t_ekko
FROM ekko
WHERE ebeln IN ebeln
AND kdatb IN s_kdatb
AND kdate IN s_kdate .

SELECT * INTO CORRESPONDING FIELDS OF TABLE t_ekpo
FROM ekpo
FOR ALL ENTRIES IN t_ekko
WHERE ebeln EQ t_ekko-ebeln .

select * into corresponding fields of table i_eban
from eban
for all entries in t_ekpo
where banfn eq t_ekpo-banfn
and bnfpo eq t_ekpo-bnfpo
and banfn in banfn
and werks in werks
and bsart in bsart
and badat in badat
and ekgrp in ekgrp
and ebeln in ebeln
and bedat in bedat
and konnr in konnr.

Espero me puedan ayudar

mcarrasco
06/01/09, 11:52:44
Los inner join se hacen con otras tablas de la base de datos... El FOR ALL ENTRIES creo q se usa solo con una tabla interna.! Esa creo es una diferencia.!

Te coloco un ejemplo de Inner Join:

form find_data.

data columns type string.
data ls_outtab type e_outtab.
data indx type sy-tabix.
data ls_color type lvc_s_scol.


columns = `mseg~matnr mseg~werks mseg~bwart `
& ` mseg~mblnr mseg~menge mseg~ebelp `
& ` mseg~lgort mkpf~budat mseg~zeile`
& ` mseg~erfme mseg~shkzg `.

select (columns) into corresponding fields of table gt_outtab
from ( mseg inner join mkpf on
mseg~mblnr = mkpf~mblnr and
mkpf~budat >= p_budat-low and
mkpf~budat <= p_budat-high
)
where
mseg~matnr <> space and
mseg~matnr in p_matnr and
mseg~werks = p_werks and
mseg~lgort in p_lgort and
mseg~bwart in p_bwart.

endform.

Saludos!

acontreras
06/01/09, 14:39:04
Gracias por la ayuda voy a revisar :D