Urgente Left Join

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • Karla V.
    Senior Member
    • may
    • 100

    #1

    Urgente Left Join

    Buen día, estoy tratando de hacer un select con varios left join pero SAP al parecer tiene un límite de left join...yo con sql si puedo hacerlo, lo que estoy tratando de hacer es buscar los precios de venta de todos los articulos y los que no lo tengan en la tabla A501 que aparezcan pero con precio en 0, para eso hice esto:
    SELECT mard~matnr "Material
    mard~werks "Centro
    mard~lgort "Almacén
    mard~labst "Libre Utilización
    makt~maktx
    mvke~kondm " Grupo de Material
    A501~PLTYP "tipo de precio Z1 o Z2
    KONP~KBETR "PRECIO
    INTO CORRESPONDING FIELDS OF TABLE t_data
    FROM mard
    left outer JOIN makt
    ON makt~matnr EQ mard~matnr AND makt~spras = 'S'
    inner JOIN mvke " para sacar el grupo de material pero por material
    ON mvke~matnr EQ makt~matnr " saca dos posiciones.
    inner JOIN A501 "tipo de precio Z1 o Z2
    ON A501~matnr EQ makt~matnr
    and A501~werks = mard~werks
    inner JOIN KONP "PRECIO
    ON KONP~KNUMH EQ A501~KNUMH
    WHERE mard~werks IN s_werks
    AND mard~matnr IN s_matnr
    AND mard~lgort IN s_lgort
    AND A501~PLTYP IN S_TIPO "z1 o z2
    AND mvke~kondm IN s_kondm
    aNd A501~DATBI EQ '99991231'.
    Que otra forma se les ocurre sin usar varios left?
  • Danielaabap
    Junior Member
    • may
    • 2

    #2
    Sin foto no hay ayuda

    Comentario

    • kibo
      Senior Member
      • may
      • 177

      #3
      Originalmente publicado por Danielaabap
      Sin foto no hay ayuda
      Daniela pide foto de karla? estas cosas existen en las abaperas?
      http://diariotitular.com/contacto/

      Comentario

      • Karla V.
        Senior Member
        • may
        • 100

        #4
        jajaja pero que esta pasando aquí? jajaja la fotos que les puedo dar es la del tremendo error que me genera sap cuando hago muchos left jejejejeje conformense con saber que son 100 90 60 jajaja no mentira

        Comentario

        • angelcruzg
          Junior Member
          • mar
          • 22

          #5
          Originalmente publicado por Karla V.
          jajaja pero que esta pasando aquí? jajaja la fotos que les puedo dar es la del tremendo error que me genera sap cuando hago muchos left jejejejeje conformense con saber que son 100 90 60 jajaja no mentira
          ¿ Puedes colocar el texto completo del DUMP que te genero?

          Comentario

          • jtristan
            Senior Member
            • oct
            • 240

            #6
            He hecho una prueba con varios joins y no me da ningún problema.

            select
            vbak~vbeln
            into table
            t_
            from
            vbak
            left outer join
            vbap
            on
            vbak~vbeln = vbap~vbeln
            inner join
            mara
            on
            vbap~matnr = mara~matnr
            inner join
            MAKT
            on
            mara~matnr = makt~matnr and
            spras = sy-langu
            INNER JOIN
            TVak
            on
            vbak~auart = TVAK~auart
            inner join
            TVAU
            on
            vbak~augru = tvau~augru.

            Igual viendo el dump podríamos hacernos alguna idea más concreta. Puedes probar, a ir haciendo la sql por parte, primero el left join a ver si si que recoges datos y después ir añadiendo cada uno de los inner join, a ver en qué punto te da error.
            También podrías sustituir los inner join por for all entries in. Pierdes rendimiento pero podría valerte.

            Un saludo.

            Comentario

            • Siem
              Member
              • jul
              • 33

              #7
              Hacer un join para obtener un campo de una tabla no es muy eficiente. Por ejemplo, para obtener el nombre del material metes en el join a la MAKT para obtener solo el maktx.

              Es mejor ver con los datos de los que partes, no se si el material sera uno de ellos y obtener de la MARD los que vas a tratar y meterlos en una TI_MARD. Luego haces un select into table a una tabla interna for all entries de los materiales que tienes en TI_MARD por el campo que relacione las dos tablas.

              Y finalmete recorres la tabla TI_MARD actualizando el campo maktx a partir de esa segunda TI, haciendo un read table.

              Las TI las puedes definir incluso ordenadas para que vaya mas rapido.

              Si consigues sacar mas de una tabla del join, el rendimiento mejorará. Pero debes tener cuidado con los for all entries, que si no lo haces bien, puede ser hasta peor.

              Comentario

              • DCErick
                Moderator
                • mar
                • 1090

                #8
                Originalmente publicado por Siem
                Hacer un join para obtener un campo de una tabla no es muy eficiente. Por ejemplo, para obtener el nombre del material metes en el join a la MAKT para obtener solo el maktx.

                Es mejor ver con los datos de los que partes, no se si el material sera uno de ellos y obtener de la MARD los que vas a tratar y meterlos en una TI_MARD. Luego haces un select into table a una tabla interna for all entries de los materiales que tienes en TI_MARD por el campo que relacione las dos tablas.

                Y finalmete recorres la tabla TI_MARD actualizando el campo maktx a partir de esa segunda TI, haciendo un read table.

                Las TI las puedes definir incluso ordenadas para que vaya mas rapido.

                Si consigues sacar mas de una tabla del join, el rendimiento mejorará. Pero debes tener cuidado con los for all entries, que si no lo haces bien, puede ser hasta peor.
                +1 Si fuera face le diera Like IT....

                Adicional, el unico problema con el FOR ALL ENTRIES es que lo hagas con una tabla interna vacía, solo se debe tener cuidado de no ejecutar el select cuando la tabla está vacía y listo, lo demas debe andar bien.

                Y viendo el select la verdad si está bien pesado, mas vale hacer muchisimas mas líneas de código pero con buen performance que una sola línea que matara el servidor, Siem ya puso un pequeño "How to do" y recomiendo que sea de esa forma.
                -------------------
                ¿Dudas para descargar manuales? Ver este tema -> Cómo descargar manuales de la sección "Descargas" ?

                Comentario

                Trabajando...