Usar tablas internas como condicion en un select

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • DrErix
    Junior Member
    • jul
    • 13

    #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
    Editado por última vez por DrErix; 16/01/2008, 14:24:50.
    Cada vez que un programador hace una hora extra, Dios mata a un gatito... tenlo en cuenta.
  • ppchico
    Senior Member
    • oct
    • 144

    #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...

    Comentario

    • DrErix
      Junior Member
      • jul
      • 13

      #3
      Gracias

      Muchas gracias,
      Me ha sido de gran ayuda, no habia caido en esta posibilidad
      Cada vez que un programador hace una hora extra, Dios mata a un gatito... tenlo en cuenta.

      Comentario

      • Rodolfo Montiel Rivera
        Member
        • oct
        • 92

        #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.

        Comentario

        • DrErix
          Junior Member
          • jul
          • 13

          #5
          No me has pillado

          Originalmente publicado por Rodolfo Montiel Rivera
          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.
          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
          Cada vez que un programador hace una hora extra, Dios mata a un gatito... tenlo en cuenta.

          Comentario

          Trabajando...