#1
|
|||
|
|||
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 Úlima edición por DrErix fecha: 16/01/08 a las 14:24:50. |
#2
|
||||
|
||||
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... |
#3
|
|||
|
|||
Gracias
Muchas gracias,
Me ha sido de gran ayuda, no habia caido en esta posibilidad |
#4
|
||||
|
||||
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.
__________________
01010000 01001010 10011000 10100001 De Byte a Beat. |
#5
|
|||
|
|||
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 |
Herramientas | Buscar en Tema |
Desplegado | |
|
|