Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Problema con left join

Estas en el tema de Problema con left join en el foro de Mysql en Foros del Web. Hola, a ver quien me pude ayudar. Tengo un problema con una instruccion como esta que no consigo que me funcione en la base de ...
  #1 (permalink)  
Antiguo 29/09/2011, 14:40
 
Fecha de Ingreso: octubre-2009
Mensajes: 46
Antigüedad: 10 años, 1 mes
Puntos: 1
Problema con left join

Hola, a ver quien me pude ayudar. Tengo un problema con una instruccion como esta que no consigo que me funcione en la base de datos real. Lo que quiero es que la consulta me devuelva las ventas por cada manguera (me refiero a mangueras de dispensarios de gasolina), pero en caso de que no haya, me devuelva un registro en blanco. Me cree una base de datos de prueba y si funciona bien pero en al real, con cerca de 40 mil registros, sencillamente no lo hace. El objetivo es hacer un reporte de ventas por dia y el problema esta cuando seleccionan un intervalo de un dia pro ejemplo, que no ha habido ventas de esa manguera no me devuelve ese registro.

select m.mangueraID
from tbl_cto_manguera m
left join tbl_cto_ventas v on v.mangueraID = m.mangueraid

group by mangueraID
order by mangueraID
  #2 (permalink)  
Antiguo 29/09/2011, 15:06
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.321
Antigüedad: 12 años
Puntos: 2653
Respuesta: Problema con left join

Normalmente, los registros NULL no se devuelven.
El uso de LEFT JOIN es para que te devuelva los datos de la primera tabla (la de la izquierda) tengan o no coincidencia con la segunda tabla (derecha). Si suprimes los campos de la primera tabla, no te devolverá los registros no coincidentes de la derecha porque, precisamente, no existen.

Ten en cuenta que NULL no es un dato "vacío". Null no es un dato sino un estado de indeterminación o un puntero a la nada. Y la nada no se puede representar...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 29/09/2011, 16:49
 
Fecha de Ingreso: octubre-2009
Mensajes: 46
Antigüedad: 10 años, 1 mes
Puntos: 1
Respuesta: Problema con left join

Gracias pr la respuesta.

Para procisar mejor:

El uso de LEFT JOIN es para que te devuelva los datos de la primera tabla (la de la izquierda) tengan o no coincidencia con la segunda tabla (derecha)

Mi primera tabla es tbl_cto_manguera y en ella no elimino registros, es mas los tengo bien delimitados pues en algunos lugares son apenas 8 registros. Mi segunda tabla es tbl_cto_ventas. Ahi puede que no haya un registro para una manguera dada. Pero en la base de datos de prueba, me funcioan bien, me sale el campo mangueraID y los demas campos de la venta, litros e importe me salen null pues no hay registros. Pero enla base de datos real, simplemente no me sale el registro de la manguera que no haya tenido ventas.

Tendria algo que ver la clausula where?? Como lo que deseo es un reporte de un intervalo de tiempo, filtro los datos en el where y lso campos que filtro estan en la tabla de ventas.

El select que necesito hacer es mas complejo pues incluye otros niveles de agrupacion como dispensario y combustible ademas de agruàrse por fecha, DATE_FORMAT(fecha,'%Y/%m/%d'), pero me di cuenta que la relacion en el primer nivel, venta-manguera no estaba funcionando bien y para simplificar, trato de determinar pq no funciona para luego incluirle lso demas elementos.

saludos
  #4 (permalink)  
Antiguo 30/09/2011, 05:16
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.321
Antigüedad: 12 años
Puntos: 2653
Respuesta: Problema con left join

En SQL el orden de los factores altera el producto.
En primer lugar, en el ON pon primero el alias de la primera tabla, y luego la segunda:
Código MySQL:
Ver original
  1. SELECT m.mangueraID
  2. FROM tbl_cto_manguera m LEFT JOIN tbl_cto_ventas v ON m.mangueraid = v.mangueraID
  3. GROUP BY mangueraID
  4. ORDER BY mangueraID
Luego, tienes que considerar que te devuelva sí o sí los NULL. Para eso debes usar el WHERE con dos condiciones:
Código MySQL:
Ver original
  1. SELECT m.mangueraID
  2. FROM tbl_cto_manguera m LEFT JOIN tbl_cto_ventas v ON m.mangueraid = v.mangueraID
  3. WHERE 1 OR v.mangueraID  IS NULL
  4. GROUP BY mangueraID
  5. ORDER BY mangueraID
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: join, left, registros, select
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:45.