inner join (Duplica Información)

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • abfv
    Senior Member
    • feb
    • 144

    #1

    inner join (Duplica Información)

    Hola, a todos. Tengo un problema que no estoy pudiendo solucionar, hago el siguiente inner join y en agunos casos, que no puedo detectar que tienen, me duplica la información, alguien me puede decir que tengo mal.

    Saludos y gracias.

    SELECT ekes~ebeln "Nº O.C.
    ekes~ebelp "Posición de O.C.
    ekes~eindt "Fecha de Entrega
    ekes~menge "Cantidad
    ekes~xblnr "Documento Externo
    ekes~ebtyp "Tipo de Confirmación
    ekpo~matnr "Material
    ekko~lifnr "Proveedores
    vbep~vbeln "Pedido de Ventas
    vbep~posnr "Posición
    vbep~edatu "Fecha de Entrega
    vbak~kunnr "Cliente Solicitante
    vbak~bstnk "Referencia al pedido del cliente
    vbup~fksta "Estado Respecto Facturación

    INTO CORRESPONDING FIELDS OF TABLE t_interz1
    FROM ekes

    INNER JOIN ekko
    ON ekes~ebeln = ekko~ebeln

    INNER JOIN ekpo
    ON ekes~ebeln = ekpo~ebeln
    AND ekes~ebelp = ekpo~ebelp

    INNER JOIN eban
    ON ekpo~ebeln = eban~ebeln
    AND ekpo~ebelp = eban~ebelp

    INNER JOIN ebkn
    ON eban~banfn = ebkn~banfn
    AND eban~bnfpo = ebkn~bnfpo

    INNER JOIN vbep
    ON ebkn~vbeln = vbep~vbeln
    AND ebkn~vbelp = vbep~posnr

    INNER JOIN vbup
    ON vbep~vbeln = vbup~vbeln
    AND vbep~posnr = vbup~posnr

    INNER JOIN vbak
    ON vbep~vbeln = vbak~vbeln

    WHERE ekes~eindt IN s_einZ1 "Fecha de Confirmación
    AND ekes~ebtyp = 'Z1' "Tipo de Confirmacion de Entregs
    AND ekes~ebeln IN s_ebeln "Documento de Compras
    AND ekpo~werks = p_werks "Centro
    AND ekpo~loekz NE 'L'
    AND ekpo~knttp EQ 'X'
    AND ekpo~pstyp EQ '5' "Pedidos a Terceros
    AND vbak~kunnr IN s_kunnr "Cliente Solicitante
    AND vbak~bstnk IN s_bstnk "Referencia al pedido del Cliente
    AND vbak~vbeln IN s_vbeln "Documento de Ventas
    AND ekpo~matnr IN s_matnr "Material
    AND ekko~lifnr IN s_lifnr. "Proveedor
  • jcflores
    Member
    • mar
    • 55

    #2
    Estimado.

    De acuerdo a tu comentario, si mencionas que sólo en ALGUNOS CASOS duplica información, en lo personal, revisaria la consistencia de DATA en la base de datos (Tomarse la molestia de ir Tabla a Tabla y hacer los "Select" manuales vía SE16 o SE16n).

    En todo caso, si deseas una solución rápida (lo cuál no quiere decir sea la más óptima) puedes aplicar un DELETE ADJACENT DUPLICATES (Uy tiempo que no ocupo esta sentencia) luego de la selección, y así te aseguras que no te queden registros duplicados.

    Asimismo, en lo personal no soy muy amigo de los "Inner Join" pero si puedes realizar la consulta de otra manera mucho más rápida y en forma secuencial intenta aplicarla, para mejorar la performance de tu programa y en casos como este vía debugger puedas revisar que efectivamente rescata la data que tú le solicitas. Recuerda es sólo un computador, el hace lo que tú ordenes.

    Saludos y éxitos.
    Saludos.

    Juan Carlos Flores
    Consultor ABAP

    "Pensar, programar... él solo compila y ejecuta"

    Comentario

    • bisonye
      Senior Member
      • ago
      • 635

      #3
      Reconozco que los inner join en muchos casos mejoran el rendimiento y son cómodos para hacer consultas. Pero en este caso creo que es mejor lo que comenta el amigo jcflores. Obtén los datos con selects más sencillos y mediante for all entries, esa sentencia que has puesto es demasiado compleja.

      Saludos
      http://sapymas.blogspot.com/

      Comentario

      Trabajando...