SQL Server - Como hago inner join de dos tablas a una

 
Vista:

Como hago inner join de dos tablas a una

Publicado por kinetic_brain (67 intervenciones) el 18/04/2011 16:09:26
Buenos días, por favor necesitos de su ayuda

Tengo una tabla de pagos proncipal esta es medios de pagos y tengo otras dos tablas llamadas cheques y tarjetas.

las tres tablas tienes los campos llave caja_fijica y Num_ope, el problema que cuando hago los inner join no me muestra nada, pero por separado si osea si a la tabla medios de pago le hago inner join con cheque me muestra datos, tengo malo los inner join.

esto no me muestra nada:

SELECT dbo.RRMEPADT.[ MEPA_ENT_REC_CD], dbo.RRMEPADT.[ MEPA_AGE_REC_CD], dbo.RRMEPADT.[ MEPA_CAJ_LOG_CD],
dbo.RRMEPADT.[ MEPA_USU_REC_CD], dbo.RRDTARDT.DTAR_CAJ_FIS_CD, dbo.RRDTARDT.DTAR_TIP_TRJ_CD,
dbo.RRDTARDT.DTAR_ADM_TRJ_CD, dbo.RRDTARDT.DTAR_NUM_TRJ_NU, dbo.RRDTARDT.DTAR_TIT_MEP_DS,
dbo.RRDCHEDT.DCHE_CAJ_FIS_CD
FROM dbo.RRMEPADT

INNER JOIN
dbo.RRDTARDT ON dbo.RRMEPADT.[ MEPA_CAJ_FIS_CD] = dbo.RRDTARDT.DTAR_CAJ_FIS_CD AND
dbo.RRMEPADT.[ MEPA_COD_OPE_CD] = dbo.RRDTARDT.DTAR_COD_OPE_CD
INNER JOIN
dbo.RRDCHEDT ON dbo.RRMEPADT.[ MEPA_CAJ_FIS_CD] = dbo.RRDCHEDT.DCHE_CAJ_FIS_CD AND
dbo.RRMEPADT.[ MEPA_COD_OPE_CD] = dbo.RRDCHEDT.DCHE_COD_OPE_CD


pero si dejo uno de los dos inner si me muestra datos la cosa es que si en el cado del primer join hay cruce muestre o sino que muestre en el segundo join. por favor su ayuda.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Como hago inner join de dos tablas a una

Publicado por Ariel (3 intervenciones) el 18/04/2011 17:00:48
Hola, para que tu consulta muestre datos se tienen que cumplir en todos los casos el INNER JOIN si alguno de los INNER JOIN no cumple con lo que pusiste no mostrara el otro INNER JOIN y asi reciprocamente... para eso podes usar LEFT JOIN y te recomiendo usar alias, asi simplificas un poco el codigo y si tus tablas estan en la misma base de datos no hace falta que uses dbo

SELECT P.MEPA_ENT_REC_CD, P.MEPA_AGE_REC_CD, P.MEPA_CAJ_LOG_CD,
P.MEPA_USU_REC_CD, T.DTAR_CAJ_FIS_CD, T.DTAR_TIP_TRJ_CD,
T.DTAR_ADM_TRJ_CD, T.DTAR_NUM_TRJ_NU, T.DTAR_TIT_MEP_DS,
C.DCHE_CAJ_FIS_CD

FROM dbo.RRMEPADT AS P

LEFT JOIN
dbo.RRDTARDT AS T ON P.MEPA_CAJ_FIS_CD = T.DTAR_CAJ_FIS_CD AND
P.MEPA_COD_OPE_CD = T.DTAR_COD_OPE_CD
LEFT JOIN
dbo.RRDCHEDT AS C ON P.MEPA_CAJ_FIS_CD = C.DCHE_CAJ_FIS_CD AND
P.MEPA_COD_OPE_CD = C.DCHE_COD_OPE_CD
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Como hago inner join de dos tablas a una

Publicado por Ariel (3 intervenciones) el 18/04/2011 17:02:23
SELECT P.MEPA_ENT_REC_CD, P.MEPA_AGE_REC_CD, P.MEPA_CAJ_LOG_CD,
P.MEPA_USU_REC_CD, T.DTAR_CAJ_FIS_CD, T.DTAR_TIP_TRJ_CD,
T.DTAR_ADM_TRJ_CD, T.DTAR_NUM_TRJ_NU, T.DTAR_TIT_MEP_DS,
C.DCHE_CAJ_FIS_CD

FROM RRMEPADT AS P

LEFT JOIN
RRDTARDT AS T ON (P.MEPA_CAJ_FIS_CD = T.DTAR_CAJ_FIS_CD AND
P.MEPA_COD_OPE_CD = T.DTAR_COD_OPE_CD)
LEFT JOIN
RRDCHEDT AS C ON (P.MEPA_CAJ_FIS_CD = C.DCHE_CAJ_FIS_CD AND
P.MEPA_COD_OPE_CD = C.DCHE_COD_OPE_CD)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Como hago inner join de dos tablas a una

Publicado por kinetic_brain (67 intervenciones) el 18/04/2011 17:56:03
Gracias Ariel hice lo que me dijiste, me aparece el resultado de los left join como null.

ahora tengo una tabla que se llama RECA alias A, que es la que contiene información de pagos, a esta le hice un inner join con la tabla MEPA alias b, que es la medios de pago, y las dos tablitas que cuelgan de la MEPA, como en el caso anterior, las que estan unidas por los dos left join.

tengo esta query, pero me sigue dando null los left join que hay malo en la query por favor.

SELECT DISTINCT
A.RECA_CAJ_FIS_CD, A.RECA_COD_OPE_CD, A.RECA_SEC_OPE_NU,
A.RECA_ENT_REC_CD, A.RECA_AGE_REC_CD, A.RECA_CAJ_LOG_CD,
A.RECA_USU_REC_CD, A.RECA_COD_CLI_CD, A.RECA_COD_CTA_CD,
A.RECA_COD_EMP_CD, A.RECA_NUM_DOC_NU, A.RECA_MTO_PAG_IM,
A.RECA_FEC_PAG_FF, A.RECA_HRA_PAG_DS, A.RECA_FEC_OPR_FF,
A.RECA_ARE_FON_NU, A.RECA_NUM_FON_NU, A.RECA_RUT_CLI_CD,
A.RECA_DVF_RUT_CD, A.RECA_NUM_FOL_NU, A.RECA_EST_APL_IN,
A.RECA_EST_REV_IN, A.RECA_TIP_PRO_IN, A.RECA_TIM_ORI_TS,

B.[ MEPA_MED_PAG_CD], B.[ MEPA_COD_EMI_CD], B.[ MEPA_MTO_MEP_IM],

C.DTAR_TIP_TRJ_CD, C.DTAR_ADM_TRJ_CD, C.DTAR_NUM_TRJ_NU, C.DTAR_TIT_MEP_DS,
C.DTAR_AUT_MEP_CD, C.DTAR_AUT_ANL_FF, C.DTAR_HRA_ANL_DS, C.DTAR_COD_ANL_CD,

D.DCHE_COD_EMI_CD, D.DCHE_CTA_CTE_NU, D.DCHE_NUM_SER_NU,
D.DCHE_COD_PZA_CD, D.DCHE_TIT_MEP_DS, D.DCHE_RUT_CLI_CD,
D.DCHE_DVF_RUT_CD, D.DCHE_COD_SUP_CD, D.DCHE_EST_CHE_IN,
D.DCHE_CAN_DOC_NU

FROM RRRECADT_CARGA A INNER JOIN
RRMEPADT B ON RIGHT('000000000' + RTRIM(LTRIM(A.RECA_ENT_REC_CD)), 9) = LTRIM(RTRIM(B.[ MEPA_ENT_REC_CD]))
AND RIGHT('000000000' + LTRIM(RTRIM(A.RECA_CAJ_FIS_CD)), 9) = LTRIM(RTRIM(B.[ MEPA_CAJ_FIS_CD]))
AND RIGHT('000000000' + LTRIM(RTRIM(A.RECA_COD_OPE_CD)), 9) = LTRIM(RTRIM(B.[ MEPA_COD_OPE_CD]))
AND RIGHT('000000000' + LTRIM(RTRIM(A.RECA_AGE_REC_CD)), 9) = LTRIM(RTRIM(B.[ MEPA_AGE_REC_CD]))
AND RIGHT('000000000' + LTRIM(RTRIM(A.RECA_CAJ_LOG_CD)), 9) = LTRIM(RTRIM(B.[ MEPA_CAJ_LOG_CD]))

LEFT JOIN

RRDTARDT C ON LTRIM(RTRIM(B.[ MEPA_CAJ_FIS_CD])) = LTRIM(RTRIM(C.DTAR_CAJ_FIS_CD)) AND
LTRIM(RTRIM(B.[ MEPA_COD_OPE_CD])) = LTRIM(RTRIM(C.DTAR_COD_OPE_CD))

LEFT JOIN

RRDCHEDT D ON LTRIM(RTRIM(B.[ MEPA_CAJ_FIS_CD])) = LTRIM(RTRIM(D.DCHE_CAJ_FIS_CD)) AND
LTRIM(RTRIM(B.[ MEPA_COD_OPE_CD])) = LTRIM(RTRIM(D.DCHE_COD_OPE_CD))
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Como hago inner join de dos tablas a una

Publicado por Isaias (4558 intervenciones) el 18/04/2011 17:57:28
¿Y si quitas el LEFT y solo ocupas el JOIN?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Como hago inner join de dos tablas a una

Publicado por Ariel (3 intervenciones) el 18/04/2011 19:42:26
Cuando haces JOIN se supone que igualas una clave primaria de otra con el mismo formato y tipo de dato, donde los datos son los mismos en una tabla como en otra... por lo menos siempre trabaje de esa forma, para mi el problema es lo mismo que te dije antes... puede ser que en ningun caso se cumplan tus joins por eso da null, eso de hacer right y trim en los joins nunca lo hice... haber si alguien con mas experiencia te puede ayudar
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Como hago inner join de dos tablas a una

Publicado por kinetic_brain (67 intervenciones) el 18/04/2011 22:24:28
Estimados muchas gracias ya me funciono, me sirvio el LEFT JOIN, cargue nuevamente las tablas y me funciono debo haber cargado otro día en la tabla principal, pero ahora si que si, muchas gracias.

el RTRIM Y LTRIM si me sirven en el join, hay una tabla que quedo con espacio en cada campo si no los colocos no hace join.


saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar