PDA

Ver la Versión Completa : Instruccion Sql


johava
04/06/08, 15:31:42
Hola tengo dos tablas FMIOI (tabla de rpc) y LFA1 (tabla de acreedores), necesito leer la tabla FMIOI y que con base en el campo CODIGO DEL ACREEDOR de esta tabla (LIFRN) lea la tabla LFA1 y extraiga su nombre (campo name1).

Actualmente tengo el siguiente codigo.


Select * from FMIOI
WHERE REFBN = NRPC AND GJAHR = VIGRPC.
Select single NAME1 LIFNR from LFA1 into (NOMBEN, CODBEN)
WHERE LIFNR = FMIOI-LIFNR.



COMO LO PUEDO HACER MAS EFICIENTE?
NOTA: la idea es no hcaer select * from tabla, dado que la tabla tiene muchos campos y realmente solo requiero algunos.

GRACIAS POR LA COLABORACION

pmarinab
04/06/08, 15:38:58
Lo mas eficiente es una JOIN:

SELECT (los campos que quieras)
INTO (donde quieras)
FROM FMIOI
JOIN LFA1
ON FMIOI~LIFNR = LFA1~LIFNR
WHERE FMIOI~REFBN = NRPC
AND FMIOI~GJAHR = VIGRPC.

robert_milan
04/06/08, 15:40:24
la tabla interna itab
sera de la siguiente manera:
data: begin of itab occurs 0,
lifnr like fmioi-lifnr,
***aqui iran mas campoos,
end of itab.

data: begin of itab2 occurs 0,
lifnr like LFA!-lifnr,
name1 like lfa1-name1,
end of itab2.

Select lifnr into table itab from FMIOI
WHERE REFBN = NRPC AND GJAHR = VIGRPC.

Select lifnr name1 into table itab2
from LFA1 for all entries of itab " Aqui le digo que me traiga todas las coincidencias de ITAB"
WHERE LIFNR = itab-LIFNR.

con esto todo lo harias en memoria

loop at itab. " le haces el loop para recorrer la tabla 1
read table itab2 with key lifnr = itab-lifnr. " veo el nombre del acredor
endloop.

espero te sirva.