MUNDOSAP

MUNDOSAP (foro/index.php)
-   Programación ABAP IV (foro/forumdisplay.php?f=4)
-   -   Usar tablas internas como condicion en un select (foro/showthread.php?t=10283)

DrErix 16/01/08 14:19:01

Usar tablas internas como condicion en un select
 
Hola a todos,

Tengo una gran duda, necesito usar tablas internas como lista de valores en el apartado WHERE de un SELECT, ya conozco la instrucción FOR ALL ENTRIES pero eso solo me permite comparar con una sola tabla interna, mi problema es que necesito comparar con mas de una tabla interna en el mismo SELECT.
De momento estoy haciendo un LOOP AT con la primera tabla e incluyo la segunda en la instrucción FOR ALL ENTRIES pero evidentemente eso conlleva un gran problema de performance y cuando la tabla consultada empieze a crecer tendré serios problemas.

Alguien me haria el favor de ayudarme?

Gracias por adelantado

ppchico 17/01/08 09:20:12

Personalmente, creo que lo mejor que podrías hacer, sería lo siguiente:

1 Puedes almacenar toda la información de ambas tablas en una sola tabla auxiliar, de modo que ya tendrías todos los datos a comparar, y usarías dicha tabla para el FOR ALL ENTRIES. (Esto solo es posible, si las tablas internas que quieres incluir en el select, tienen alguna relación de datos).

2 Puedes recuperar todos los datos en el select, sin tener en cuenta los datos de las tablas internas, y posteriormente, recorrer la tabla, y eliminar aquellos registros que no cumplan las condiciones de las tablas internas, es decir:

select *
from tabla_diccionario
into lt_tabla_aux
where <condiciones locales a la tabla>

loop at lt_tabla_aux into ls_registro_aux.

read table lt_tabla_aux_1 with key <condicion de encuentro>.

check sy-subrc eq 0.

read table lt_tabla_aux2 with key <condiocion de encuentro>

check sy-subrc eq 0.

....

append ls_registro_aux into lt_tabla_final.

endloop.



Espero que te sirva...

DrErix 18/01/08 07:45:50

Gracias
 
Muchas gracias,
Me ha sido de gran ayuda, no habia caido en esta posibilidad

Rodolfo Montiel Rivera 18/01/08 21:07:59

Y si necesita extraes de mas de una tabla usas inner joins
 
Ejemplo

TABLAA TABLAB TABLAC
campo1 campo1 campo2
campo2 campo4 campo6
campo3 campo5

Select a~campo1
a~campo2
a~campo3
b~campo4
b~campo5
c~campo6
INTO TABLE itab_auxiliar
FROM tablaA as a
INNER JOIN tablaB as b
ON b~campo1 = a~campo1
INNER JOIN tablaC as c
ON c~campo2 = a~campo2
WHERE a~campo1 EQ ' '
AND a~campo2 EQ ' '
AND c~campo6 NE ' '.

Explicacion:

Contruyo una sola tabla trayendome campos diferentes de 3 tablas por su campo relacion existente mas aparte las condicionates del where asi podrias traerte la mayor cantidad de informacion de un solo tajo.

DrErix 21/01/08 14:08:36

No me has pillado
 

No me has entendido lo que queria decir, yo necesito leer una tabla estandard, comparandola con varias tablas internas, tu me explicas como unir varias tablas estandard


Husos Horarios son GMT. La hora en este momento es 22:49:05.

www.mundosap.com 2006 - Spain
software crm, crm on demand, software call center, crm act, crm solutions, crm gratis, crm web