joins en mysql

4 views
Skip to first unread message

jlgb

unread,
Jul 23, 2009, 1:24:30 PM7/23/09
to SQL México
Hola.
Estoy haciendo un query en mysql que usa varios joins.

Me estoy basando en este post: http://quarkblog.org/2007/04/22/joins-para-seres-humanos/
pero tengo dudas con algunos que no ejemplifica.

El asunto es que al agregar un inner join deja de traerme datos (no
hay coincidencias).
Mi duda es hay algún tipo de join que me permita traer datos y marque
como null las columnas que no coincidan??

Cualquier orientación se agradece.

PS: El query con el que estoy trabajando en cuestión es este:

SELECT sc.num_contrato, sc.estado
,cc.dmx, cc.booking, cc.inst_embarque, cc.planta_dest
,de.fecha
,pl.fecha as 'packin_fecha'
,rem.ndx_remisiones, rem.num_remision, rem.cancelada as
'rem_cancelada'
,num_bl
FROM contrato sc
inner join cant_contenedores cc on(cc.num_contrato = sc.num_contrato)
inner join doc_embarque de on (de.id_embarque = cc.inst_embarque)
inner join packing_list pl on (pl.dmx = cc.dmx and pl.num_contrato =
sc.num_contrato)
inner join remisiones rem on (rem.packing_list = pl.ndx_packing_list)
inner join remisiones_bl as rem_bl on(rem_bl.ndx_remision =
rem.ndx_remisiones) #sin coincidencias
inner join billoflading bl on (rem_bl.ndx_bl = bl.ndx_bl)
ORDER BY sc.f_alta desc, sc.num_contrato desc;

Juan Chanclas

unread,
Jul 23, 2009, 1:44:02 PM7/23/09
to sql-m...@googlegroups.com
utiliza left join en latabla que no te interese trarte todas las coincidencias
 
Este query te traería todos los clientes que tengan un registro de la tabla "puesto", pero si no existe el registro no aparecerá el cliente en el resultado
 
select clientes.nombre, puesto.departamento 
 from clientes
 inner join puesto on clientes.idpuesto = puesto.id
 
Si usas un left join traeras toda la lista de clientes y los que tengan una relacion con un registro traera el puesto y el que no lo traera como nulo:
 
select clientes.nombre, puesto.departamento 
 from clientes
 left join puesto on clientes.idpuesto = puesto.id
 
 
En tu query tienes varios inner join's solo tendrías que analizar hasta que punto quieres traerte todo en nulo si es que no tiene relación para sustituir los join's por left's
2009/7/23 jlgb <virtu...@gmail.com>

pyxus

unread,
Jul 24, 2009, 1:44:32 AM7/24/09
to SQL México
Hola jlgb, te recomiendo darle una revisada a este post:
http://boozox.net/mysql/explicacion-visual-de-los-sql-join-unir-tablas-con-sql/
donde explica tambien de los joins.

Comentas si te sirvió la solución que te propuso Juan, sino para que
te ayudemos con otra solución.

Suerte!!! -

jlgb

unread,
Jul 24, 2009, 1:21:56 PM7/24/09
to SQL México
Mil gracias, el LEFT JOIN funcionó de maravilla.
Al final puse todos los JOIN como LEFT

On 23 jul, 12:44, Juan Chanclas <juan.chanc...@gmail.com> wrote:
> utiliza left join en latabla que no te interese trarte todas las
> coincidencias
>
> Este query te traería todos los clientes que tengan un registro de la tabla
> "puesto", pero si no existe el registro no aparecerá el cliente en el
> resultado
>
>  select clientes.nombre, puesto.departamento
>  from clientes
>  inner join puesto on clientes.idpuesto = puesto.id
>
> Si usas un left join traeras toda la lista de clientes y los que tengan una
> relacion con un registro traera el puesto y el que no lo traera como nulo:
>
>  select clientes.nombre, puesto.departamento
>  from clientes
>  left join puesto on clientes.idpuesto = puesto.id
>
> En tu query tienes varios inner join's solo tendrías que analizar hasta que
> punto quieres traerte todo en nulo si es que no tiene relación para
> sustituir los join's por left's
>
> Visitahttp://wwwfurulando.com
>
> 2009/7/23 jlgb <virtual...@gmail.com>
Reply all
Reply to author
Forward
0 new messages