MUNDOSAP

Regresar   MUNDOSAP > DESARROLLO > Programación ABAP IV
Nombre de Usuario
Contraseña
Home Descargas Registrar FAQ Miembros Calendario Buscar Temas de Hoy Marcar Foros Como Leídos




 
Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Viejo 24/08/09, 21:45:27
apauber apauber is offline
Junior Member
 
Fecha de Ingreso: jun 2009
Mensajes: 17
Unhappy Inner-join

Hola a todos, tengo que reemplazar un inner-join a 5 tablas porque esta teniendo un problema de performans. Me pidieron que desarme el Inner-Join en en 5 selects distintos.
Mi objetivo es tener el mismo resultado que da el inner-join con mis selects separados.
Voy a copiar el INNER-JOIN y mis 5 select con el proceso de los datos. Lo que les pido es si me pueden ayudar un poco porque no esta funcionando correctamente.
Si pueden marcarme los erroros y mostrarme como deberia ser me harian un gran favor.
INNER-JOIN:

* select a~vbeln a~posnr a~bstdk a~zlsch a~bstkd a~bstkd_e a~ihrez_e a~pltyp b~fkdat a~fplnr
* b~fpltr b~faksp b~afdat b~netpr b~kzwi1 b~kzwi3 b~kzwi4 b~kzwi5
* c~matnr c~matkl c~netwr c~waerk c~aufnr c~bankn c~banks c~kdmat
* e~folio e~neto e~iva e~total
* into corresponding fields of table wa
* from vbkd as a
* inner join fplt as b on b~fplnr = a~fplnr
* inner join zclsd03_tventa as e on e~vbeln = a~vbeln
* and e~posnr = a~posnr
* and e~fplnr = b~fplnr
* and e~fpltr = b~fpltr
* and e~zlsch = a~zlsch
* inner join vbap as c on c~vbeln = a~vbeln
* and c~posnr = a~posnr
* inner join vbak as f on f~vbeln = c~vbeln
*
* where a~vbeln in s_vbeln
* and a~bstkd in s_bstkd
* and a~zlsch in r_zlsch
* and b~faksp in r_faksp
* and b~fkdat in r_fkdat
* and b~fksaf ne c_fksaf
* and a~pltyp in r_pltyp
* and f~faksk ne '02'.

Y ASÍ LO REEMPLACÉ:


Espero puedan ayudarme porque no se en que me estoy equivocando, muchisimas gracias .
Saludos !!
Responder Con Cita
  #2  
Viejo 25/08/09, 09:03:37
Atlas Atlas is offline
Senior Member
 
Fecha de Ingreso: ago 2007
Mensajes: 107
Hola.

Así a simple vista esta bien, por lo menos el planteamiento, pero ten en cuenta dos cosas que tal vez estén afectando.

1 - el for all entries, intrinsecamente implica un delete duplicates. Así que para que no te borre los duplicados, en la tabla interna tienes que recoger todos los campos clave de la tabla a la que haces el select ( aunque luego no los utilices )

2 - estas haciendo read a las tablas internas, ten en cuenta que esto es correcto si la correspondencia entre la primera tabla y el resto es 1 <> 1, si es 1 <> n deberías hacer un loop where.

Espero que te sirva de ayuda
Responder Con Cita
  #3  
Viejo 25/08/09, 13:15:40
apauber apauber is offline
Junior Member
 
Fecha de Ingreso: jun 2009
Mensajes: 17
Exclamation Muchas Gracias

La verdad no sabia lo del for all entries así que ahora me fijo eso y si no estoy recuperando los campos claves voy a empezar a hacerlo. Con respecto a lo que me decis del Read eso creo que esta bien porque a las tablas que les hago read accedo unicamente por la clave.
Muchas gracias por la ayuda !!!
De todas formas si alguien mas encuentra algun error porfavor diganme porque así como esta la logica, no me recupera lo mismo que el inner joing.
Responder Con Cita
  #4  
Viejo 25/08/09, 13:21:00
apauber apauber is offline
Junior Member
 
Fecha de Ingreso: jun 2009
Mensajes: 17
Unhappy Eso Funciona

Me fije lo de los accesos a las tablas con el for all entries y estoy recuperando todos los campos claves así que eso no es lo que me esta funcionando mal.
Porfavor si me pueden seguir ayudando voy a estar muy agradecido.
Responder Con Cita
  #5  
Viejo 25/08/09, 20:18:30
Avatar de jacmono
jacmono jacmono is offline
Member
 
Fecha de Ingreso: jun 2006
Localización: Monterrey, Nuevo Leon, Mexico
Mensajes: 48

Podrías ser mas especifico? Que diferencias te da el inner join vs el reemplazo que has implementado?

Así de inicio me parece que se debe validar primero la cantidad de registros de uno vs el otro. Luego, que todos los campos llave que obtiene el inner join los arroje también el reemplazo, y posteriormente, que el resto de los campos correspondan entre ambos procedimientos, obvio con un ordenamiento idéntico de los resultados para facilitar la validación.

En el innerjoin veo que la tabla "f" (vbak) sólo se usa para validar que exista faksk diferente de '02', sin obtener información de ella. En el reemplazo lo puedes incluir en algún select previo (el primero , por ejemplo) y evitar el acceso sobre la tabla t_vbak, asumiendo que todos los resultados cumplieron con esa regla (faksk ne '02').

Obvio que la cantidad de registros y por ende el resultado final esta afectado por las relaciones 1-1 / 1-n que pudieran existir entre las distintas tablas que utilizas, así como por los indices declarados en tu b.d.

Sin duda alguna, el proporcionar mayor detalle facilitara la tarea de quienes te podrían prestar ayuda.

Saludos.
__________________
Jack of all Trades
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Reglas de Mensajes
no puedes crear nuevos temas
no puedes responder temas
no puedes adjuntar archivos
no puedes editar tus mensajes

El código vB está On
Las caritas están On
Código [IMG] está On
Código HTML está Off
Saltar a Foro


Husos Horarios son GMT. La hora en este momento es 12:37:05.


www.mundosap.com 2006 - Spain
software crm, crm on demand, software call center, crm act, crm solutions, crm gratis, crm web