consulta a 3 tablas en 2 tablas internas sin perder datos

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • ClaudioC
    Junior Member
    • ago
    • 11

    #1

    consulta a 3 tablas en 2 tablas internas sin perder datos

    Hola!
    Les hago un planteo mas de logica que de codigo creo yo:

    Tengo que consultar una tabla X, en donde levanto n registros a una it_1.

    De esos n registros que levante de la it_1, me interesan 2 registros por los cuales consulto a otra tabla, en la cual ambos son clave primaria, cosa que me devuelva 1 registro por cada consulta y los guardo en una it_2.

    Por cada resultado en esta it_2, consulto una tercera tabla con estos datos que me dan 1 resultado por consulta y deseo guardarlo en la tabla it_1 en el registro que corresponda a la busqueda, para luego mostrar todos estos datos desde esta misma tabla interna en un ALV.

    Por si no se entendio, un ejemplo seria el siguiente:

    SELECT REG1 REG2 REG3 REG4
    FROM TABLA1
    INTO TABLE IT_1
    WHERE NOMBRE_USUARIO IN S_NOMBRE.

    SORT IT_1 BY REG1 REG2 REG3 REG4.

    SELECT AAA1 AAA2
    FROM TABLA2
    INTO TABLE IT_2
    FOR ALL ENTRIES IN IT_1
    WHERE REG1 = IT_1-REG AND
    REG2 = IT_1-REG2.

    SELECT XXX
    FROM TABLA3
    INTO CORRESPONDING FIELDS OF IT_1
    FOR ALL ENTRIES IN IT_2
    WHERE AAA1 = IT_2-AAA1 AND
    AAA2 = IT_2-AAA2.

    La idea es que cada resultado que obtengo de la tabla 3 me lo agregue en la IT_1 en su correspondiente campo ya declarado previamente.

    Que debo modificar o como deberia hacerlo?
  • DavidXD_XD
    Moderator
    • ago
    • 1255

    #2
    Holas, yo lo haria en un solo SELECT, en una tabla interna con estos campos

    Código:
    TYPES: BEGIN OF ty_itab,
             reg1 TYPE tabla1-reg1,
             reg2 TYPE tabla1-reg2,
             reg3 TYPE tabla1-reg3,
             reg4 TYPE tabla1-reg4,
             aaa1 TYPE tabla2-aaa1,
             aaa2 TYPE tabla2-aaa2,
             xxx  TYPE tabla3-xxx,
           END OF ty_itab.
    
    DATA: gt_itab TYPE TABLE OF ty_itab.
    
    START-OF-SELECTION.
    
    SELECT a~reg1 a~reg2 a~reg3 a~reg4 b~aaa1 b~aaa2 c~xxx
      INTO TABLE gt_itab
        FROM tabla1 AS a INNER JOIN tabla2 AS b ON a~reg1 = b~reg1
                                               AND a~reg2 = b~reg2
                         INNER JOIN tabla3 AS c ON b~aaa1 = c~aaa1
                                               AND b~aaa2 = c~aaa2
          WHERE a~nombre_usuario IN s_nombre.
    Ahora hay q tener en cuenta tbm los indices de esas 3 tablas, si los indices no ayudan (campos claves) no conviene hacer ese JOIN ... espero te ayude
    David Carballido Córdova

    Comentario

    • ClaudioC
      Junior Member
      • ago
      • 11

      #3
      Originalmente publicado por DavidXD_XD
      Holas, yo lo haria en un solo SELECT, en una tabla interna con estos campos

      Código:
      TYPES: BEGIN OF ty_itab,
               reg1 TYPE tabla1-reg1,
               reg2 TYPE tabla1-reg2,
               reg3 TYPE tabla1-reg3,
               reg4 TYPE tabla1-reg4,
               aaa1 TYPE tabla2-aaa1,
               aaa2 TYPE tabla2-aaa2,
               xxx  TYPE tabla3-xxx,
             END OF ty_itab.
      
      DATA: gt_itab TYPE TABLE OF ty_itab.
      
      START-OF-SELECTION.
      
      SELECT a~reg1 a~reg2 a~reg3 a~reg4 b~aaa1 b~aaa2 c~xxx
        INTO TABLE gt_itab
          FROM tabla1 AS a INNER JOIN tabla2 AS b ON a~reg1 = b~reg1
                                                 AND a~reg2 = b~reg2
                           INNER JOIN tabla3 AS c ON b~aaa1 = c~aaa1
                                                 AND b~aaa2 = c~aaa2
            WHERE a~nombre_usuario IN s_nombre.
      Ahora hay q tener en cuenta tbm los indices de esas 3 tablas, si los indices no ayudan (campos claves) no conviene hacer ese JOIN ... espero te ayude
      David, funciono perfecto.
      Te agradezco muchisimo la ayuda.
      Un abrazo!

      Comentario

      Trabajando...