PDA

Ver la Versión Completa : Unir varias tablas usando los campos requeridos


golden_fbi
15/04/09, 14:42:28
Hola! Disculpen queria unir 5 tablas en 1 sola que es del tipo de tooodas las 5 tablas con casi todos sus campos. La tabla que asocia esas tablas y tiene las llaves es la de "zgdctt_panel" y le hago un inner join, si busca y encuentra los datos pero solamente me trae los campos que tiene la tabla "zgdctt_panel" y no me trae los otros campos que quiero de las otras 5 tablas.. Como le puedo hacer??

Este es mi codigo:

SELECT
zgdctt_Leader~fname zgdctt_Leader~lname zgdctt_Leader~ACTIVE ZGDCTT_LEADER~IDLEADER
zgdctt_Member~fname zgdctt_Member~lname zgdctt_Member~FACTLOCATION zgdctt_Member~ACTIVE ZGDCTT_MEMBER~IDMEMBER
ZGDCTT_ASSIGN~IDASSIGN
zgdctt_dvlpmnt~DEVTYP zgdctt_dvlpmnt~DESC_DVLPMNT
zgdctt_rqrmnt~DESCRQRMNT ZGDCTT_RQRMNT~IDRQRMNT
ZgDCTT_PANEL~PANELDATE ZGDCTT_PANEL~PANELDATE2

FROM ZgDCTT_PANEL

inner join ZGDCTT_MEMBER on ZgDCTT_PANEL~IDMEMBER = ZGDCTT_MEMBER~IDMEMBER
inner join ZGDCTT_LEADER on ZGDCTT_LEADER~IDLEADER = ZgDCTT_PANEL~IDLeader
inner join ZGDCTT_RQRMNT on ZGDCTT_RQRMNT~IDRQRMNT = ZgDCTT_PANEL~IDRQRMNT
inner join ZGDCTT_ASSIGN on ZGDCTT_ASSIGN~IDASSIGN = ZgDCTT_PANEL~IDASSIGN
inner join ZGDCTT_dvlpmnt on ZGDCTT_dvlpmnt~DEVTYP = ZgDCTT_PANEL~DEVTYP

INTO CORRESPONDING FIELDS OF TABLE TG_bseg
** TABLA = VALOR DEL CAMPO
*INTO CORRESPONDING FIELDS OF TABLE TG_bseg

WHERE
ZgDCTT_PANEL~IDLEADER = ZGDCTT_LEADER-IDLEADER
OR ZGDCTT_PANEL~IDMEMBER = ZGDCTT_MEMBER-IDMEMBER
OR ZgDCTT_PANEL~IDASSIGN = ZGDCTT_ASSIGN-IDASSIGN
OR ZgDCTT_PANEL~DEVTYP = ZGDCTT_DVLPMNT-DEVTYP
OR ZgDCTT_PANEL~IDRQRMNT = ZGDCTT_RQRMNT-IDRQRMNT
OR ZgDCTT_PANEL~PANELDATE = ZGDCTT_PANEL-PANELDATE.

MOVE-CORRESPONDING ZGDCTT_PANEL TO TG_BSEG.
COLLECT TG_BSEG.


Muchas gracias!!!
Atte
Moni

jcflores
15/04/09, 15:41:51
Estimado:

No ha intentado en hacer
Select *
From Tabla
Where Condición

Y luego hacer un For All Entries para las siguientes tablas, y al final mover los registros a una super tabla.

Saludos.

Atlas
15/04/09, 16:38:28
Prueba a poner al reves el "on" a estas dos tablas:

inner join ZGDCTT_MEMBER on ZgDCTT_PANEL~IDMEMBER = ZGDCTT_MEMBER~IDMEMBER

golden_fbi
15/04/09, 17:03:37
Gracias por los consejos, pero el problema esque no me aparecen todos los campos que quiero :( solamente los campos de la tabla panel (la que asocia a las otras 5) como le puedo hacer para que me traiga los demas campos de las otras tablas que corespondan a su id. (el id de cada tabla esta en el panel y esos son los que si me trae)


por ejemplo, Me trae el numero del miembro pero yo quisiera que tambien me trajera su nombre y apellido

gracias!!!

Atlas
15/04/09, 18:54:41
aparentemente el join esta bien, la única explicacion que le veo es que los campos que seleccionas no se llamen igual que los campos de la tabla interna a la que quieres volcarlos ( esto es necesario para el intocorresponding) si es el caso prueba a hacer un selecto into table, si los campos que seleccionas se corresponden en el tipo, longitud y orden con los de la tabla interna o si no es así hacindo un :

select campo1 campo2 .... campon into (campo1_bis, campo2_bis... campon_bis)

golden_fbi
16/04/09, 16:39:33
Gracias, Ya Vi Que Los Nombres De Los Campos De Las Tablas No Concordaban Con Los De Mi Tabla Interna, Lo Corregi En El Select Con Un As Y Un Into Table...

Rodolfo Montiel Rivera
16/04/09, 17:05:35
Saludos,

* Creo que también debes tomar en cuanto cual va a ser tu tabla llave y partir de que los datos que vas a ir a conseguir de otras tablas son campos que pueden o no existir.

* También podrías incluir left outer join para casos en los cuales no exista la relación con tu campo llave y asi no discriminar el registro por completo.

sconoredhot
16/04/09, 17:29:46
Hola,

Yo intentaría con hacer selects a las tablas requeridas usando el for all entries, es más consistente.

Saludos,