Unir tablas Internas

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • josjul77
    Junior Member
    • abr
    • 19

    #1

    Unir tablas Internas

    Buenas tardes.

    Necesito unir 5 tablas internas despues de haberlas llenado con datos de tablas estandar, despues necesito llenar una tabla interna con las 5 anteriores, que es lo mas recomendable?

    Gracias de Antemano.
  • minerva0112
    Senior Member
    • nov
    • 116

    #2
    Hola, que tipo de select utilizas para las busqueda de las tablas porque puedes hacer los select con un appending corresponde it_xxx, dependiendo de la estructura de tu tabla interna

    Comentario

    • mysmb2
      Senior Member
      • ene
      • 406

      #3
      si tenes 5 tablas internas, para unirlas tenes que recorre(LOOP) la de mayor jerarquía haciendo lecturas(READ) del resto de las tablas con el filtro correspondiente y luego agregarlo a una tabla con todos los campos que necesitas.

      Saludos
      Sebastián Chiavia
      http://www.programacionabap.com.ar

      Comentario

      • josjul77
        Junior Member
        • abr
        • 19

        #4
        Originalmente publicado por minerva0112
        Hola, que tipo de select utilizas para las busqueda de las tablas porque puedes hacer los select con un appending corresponde it_xxx, dependiendo de la estructura de tu tabla interna

        Hola, primero lleno las tablas internas con lo siguiente:

        SELECT *
        INTO CORRESPONDING FIELDS OF TABLE IT_MARA
        FROM MARA.

        SELECT *
        INTO CORRESPONDING FIELDS OF TABLE IT_MARC
        FROM MARC
        WHERE WERKS ='C001'.

        y asi tambien traigo datos de la MARD, MBEW y MVKE.

        hasta aqui va bien todo, tengo la información que necesito en 5 tablas y tengo la tabla IT_MAT donde contengo los mismos campos de las 5 tablas, lo que necesito es con que sentencia o logica lleno IT_MAR?

        Gracias.

        Comentario

        • VLozano
          Senior Member
          • nov
          • 124

          #5
          Consideraciones previas:
          1- elimina esos asteriscos. Listas de campos forthewin! El asterisco reduce el rendimiento, ocupa memoria y ancho de banda innecesarios y hace que parezcas un vago (lo sé porque soy un vago)
          2- considera la posibilidad de utilizar INNER JOINs. Son un asquete de escribir, pero dejar que el motor de la BD haga el trabajo sucio suele ser mejor. Si estás recuperando zillones de registros, quizá no vale la pena el JOIN, pero porsiaca.

          Y a continuación un algoritmo (o el "cómo lo haría yo").

          Selecciona los datos de la tabla principal (la MARA, supongo). Selecciona los datos de las tablas secundarias utilizando el FOR ALL ENTRIES (asegúrate de que la primera selección devuelve datos o se puede ir todo al carajo.

          Haz loops sobre las tablas SECUNDARIAS actualizando la tabla principal

          Es mucho más eficaz.
          Código:
          SELECT matnr otros_campos
            INTO TABLE t_mara
            FROM mara
            WHERE condiciones.
          CHECK sy-subrc = 0. "si no hay registros, lárgate
          
          SELECT matnr otros_campos
            INTO t_marc
            FROM MARC
            FOR ALL ENTRIES IN t_mara
            WHERE matnr = t_mara-matnr
              AND otras_condiciones.
          
          LOOP AT t_marc INTO w_marc.
            w_mara-campo1 = w_marc-campo1.
            w_mara-campo2 = w_marc-campo2.
            MODIFY t_mara 
              FROM w_mara 
              TRANSPORTING campo1 campo2
              WHERE matnr = w_marc-matnr.
          ENDLOOP.
          
          * y así para todas las tablas
          "Porque algunos sabemos que somos parte del problema"
          - Pequeña guía para escribir mensajes en foros técnicos -

          Comentario

          • minerva0112
            Senior Member
            • nov
            • 116

            #6
            Hola, has solucionado????

            Te puedo recomendar crear una vista Z con las 5 tablas, y en el codigo solo realizas un solo Select a la vista con sus repectivos filtros para el llenado de tu unica tabla interna.

            saludos

            Comentario

            • josjul77
              Junior Member
              • abr
              • 19

              #7
              Originalmente publicado por minerva0112
              Hola, has solucionado????

              Te puedo recomendar crear una vista Z con las 5 tablas, y en el codigo solo realizas un solo Select a la vista con sus repectivos filtros para el llenado de tu unica tabla interna.

              saludos

              Si gracias a todos, ya lo he solucionado.

              Comentario

              Trabajando...