PDA

Ver la Versión Completa : inner join (Duplica Información)


abfv
12/02/09, 18:13:55
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
12/02/09, 19:04:22
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.

bisonye
13/02/09, 07:56:37
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