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

[SOLUCIONADO] Inner Join, Sum y Union

Estas en el tema de Inner Join, Sum y Union en el foro de Mysql en Foros del Web. Necesito ayuda, Tengo una semana completa tratando de hacr una consulta en Mysql uniedo 3 tablas atravez de inner Join y aunque he descubierto varias ...
  #1 (permalink)  
Antiguo 01/07/2013, 18:32
Avatar de ALUadicted  
Fecha de Ingreso: julio-2013
Ubicación: Moterrey
Mensajes: 3
Antigüedad: 10 años, 9 meses
Puntos: 0
Pregunta Inner Join, Sum y Union

Necesito ayuda, Tengo una semana completa tratando de hacr una consulta en Mysql uniedo 3 tablas atravez de inner Join y aunque he descubierto varias formas de composicion ya me doi por fastidiado y estresado.

Explico Tengo la Tabla Ventas, Gastos y Depositos las cuales relaciono mediante el campo fecha, nombre de farmacia, ya que no puedo relacionarlos mediante su id ya que las tablas pueden tener N registros relacionados.

Haho la sig consulta, utilizando tambien la fx Sum para sumar los campos de gastos y depositos pertenecientes a las ventas de la farmacia y con un rengo de fechas. que cumplan con la condicion.
Código MySQL:
Ver original
  1.      ventas.fecha,
  2.        usuario_TM,
  3.        ventas_TM,
  4.        usuario_TV,
  5.            ventas_TV,
  6.           /*Utilizo los case ya que el valor puede ser nulo, tambien por que cada  
  7.                 registro se me multiplica por el numero de registros de la tabla a a  
  8.                   unir*/
  9.        CASE WHEN COUNT(gasto)>1  THEN ifnull((SUM(gasto)/count(distinct    
  10.                   id_deposito)), (SUM(gasto)/1))
  11.             ELSE ifnull(SUM(DISTINCT gasto),0)
  12.             END,
  13.        CASE WHEN COUNT(deposito)>1  THEN ifnull((SUM(deposito)/count(distinct
  14.                 gasto)), (SUM(deposito)/1))
  15.           ELSE ifnull(SUM(DISTINCT deposito),0)
  16.             END
  17.  
  18.     FROM  ventas INNER JOIN gastos INNER JOIN depositos
  19.       ON ventas.fecha=gastos.fecha AND gastos.fecha=depositos.fecha
  20.       WHERE ventas.farmacia=EJEMPLO' AND ventas.fecha
  21.                                           between '2013-06-25' AND '2013-06-27'
  22.         AND gastos.farmacia=' EJEMPLO' AND gastos.fecha
  23.                                           between '2013-06-25' AND '2013-06-27'
  24.             AND depositos.farmacia=' EJEMPLO' AND depositos.fecha
  25.                                           between '2013-06-25' AND '2013-06-27'
  26.  GROUP BY ventas.fecha
  27.     ORDER BY ventas.fecha ASC;


Es una consulta algo larga, me funciona bien pero sola mente cuando hay 1 registro de cada tabla que cumple la condicion, si ingreso mas registros por ejemplo de gastos de ese dia y de esa farmacia se me altera o multiplica la suma de depositos. y no se por que??? tambien si no hay registros de la tabla por qjemplo depositos no me arroja nigun resultado de ventas y gastos ya que esta si contienen informacion... Alguien que me de una idea

Última edición por gnzsoloyo; 02/07/2013 a las 03:56
  #2 (permalink)  
Antiguo 01/07/2013, 18:36
Avatar de ALUadicted  
Fecha de Ingreso: julio-2013
Ubicación: Moterrey
Mensajes: 3
Antigüedad: 10 años, 9 meses
Puntos: 0
Respuesta: Inner Join, Sum y Union

Olvido quiero de esta consulta obtener un solo reporte sin importar que alguna de las tres tablas no contenga informacion solo que me muestre la informacion que si halla
  #3 (permalink)  
Antiguo 02/07/2013, 04:05
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Inner Join, Sum y Union

Cita:
sin importar que alguna de las tres tablas no contenga informacion solo que me muestre la informacion que si
Un JOIN requiere coincidencia. Uno como el que planteas, es equivalente a un INNER JOIN y por tanto es mandatorio que exista.
Si lo que quieres es recoger donde si haya, podría corresponde rusar un UNION, con cada tabla por separado.
De todos modos tengo la impresión de que la lógica de la consulta completa no está bien. Pero lo analizaré un poco más tarde (ahora estoy trabajando).
Saludos.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 09/07/2013, 12:53
Avatar de ALUadicted  
Fecha de Ingreso: julio-2013
Ubicación: Moterrey
Mensajes: 3
Antigüedad: 10 años, 9 meses
Puntos: 0
Respuesta: Inner Join, Sum y Union

OK, bueno pues al final de tanto he resolvido mi problema de la consulta utilizando los JOIN y la funcion SUM... Resulta que despues de todo los JOIN no eran la unica solucion ni la mas optima, pues me ha funcionado el metodo que menciona quimvf "Divide y venceras".
Para obtener mi reporte solo hice consultas independientes y certeras dentro de un bucle con los campos coincidentes y listo. !!! Obtube una consulta mucho mas eficiente y efectiva...

Etiquetas: campo, join, registro, registros, select, sql, sum, tabla, union
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 14:42.