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

[SOLUCIONADO] Problema con INNERJOIN sumatoria no correcta.

Estas en el tema de Problema con INNERJOIN sumatoria no correcta. en el foro de Mysql en Foros del Web. Hola saludos, mi problema es que al hacer un inner join entre 2 tablas yo hago un sum en la tabla ventas_corte,pero por una razon ...
  #1 (permalink)  
Antiguo 11/10/2013, 21:35
 
Fecha de Ingreso: octubre-2013
Mensajes: 3
Antigüedad: 11 años, 1 mes
Puntos: 0
Pregunta Problema con INNERJOIN sumatoria no correcta.

Hola saludos, mi problema es que al hacer un inner join entre 2 tablas yo hago un sum en la tabla ventas_corte,pero por una razon que aun no comprendo al hacer la suma me arroja valores que no concuerdan solo en algunos registros por ejemplo en el 3743 pero si se pone otro si arroja la sumatoria correcta , un dato curioso es que en los articulos en especifico donde tengo capturadas varias compras en la tabla compras con el mismo id es donde hace la sumatoria mal,se supone a mi entender que solo debe sumar de la tabla ventas_corte ya que la tabla compras solo la uso para sacar la cantidad comprada y la restante, crei que por tener un campo con el mismo nombre era la causa pero ya cambie los nombres y no se resolvio nada. les anexo mi consulta y las 2 tablas que utilizo.

Código MySQL:
Ver original
  1.     ventas_corte.idarticulo AS IDARTICULO,
  2.     SUM(DISTINCT compras.cantidad) AS CANTIDAD_COMPRADA,
  3.     sum(ventas_corte.cantidad) AS CANTIDAD_VENDIDA,
  4.     SUM(DISTINCT compras.cantidad) - sum(ventas_corte.cantidad) AS RESTANTE
  5.     FROM
  6.     ventas_corte
  7. INNER JOIN compras ON ventas_corte.idarticulo = compras.idarticulo
  8.     ventas_corte.idarticulo = 3743
  9.     ventas_corte.idarticulo
  10.     ventas_corte.idarticulo ASC

[URL="http://www.mediafire.com/download/y3c8yst8b3370c2/tablas.zip"[/URL]
  #2 (permalink)  
Antiguo 11/10/2013, 21:58
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Problema con INNERJOIN sumatoria no correcta.

No puedes usar una tabla de compras para realizar un JOIN contra una tabla ventas. SOn conceptos incompatibles. Ese tipo de resumen de movimiento se realiza de otro modo.
Por lo pronto, no puedes hacer un resumen de compras y ventas si usar la tabla productos, porque que tengas compras en un determinado período, no implica necesariamente que tengas ventas de ese producto, para el mismo período, y viceversa.
Ese tipo de resumenes se realiza, como dije, con la tabla Productos pero por medio de subconsultas donde obtienes los totales de cada concepto por separado:
Código MySQL:
Ver original
  1. SELECT t1.idarticulo, totalVentas, totalCompras, (totalCompras - totalVentas) SaldoExistencia
  2.     (SELECT p.idarticulo, SUM(vc.cantidad) totalVentas
  3.     FROM productos p LEFT JOIN ventas_corte vc ON p.idarticulo = vc.idarticulo
  4.     GROUP BY p.idarticulo) T1
  5.     INNER JOIN
  6.     (SELECT p.idarticulo,  SUM(compras.cantidad) TotalCompras
  7.     FROM FROM productos p LEFT JOIN compras c ON p.idarticulo = c.idarticulo
  8.     GROUP BY p.idarticulo) T2 ON T1.idarticulo = T2.idarticulo
  9. ORDER BY t1.idarticulo
¿Se entiende?
Este tema se ha tratado ya varias veces, y es un error de concepto muy habitual entre los que se inician.
__________________
¿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 11/10/2013, 22:43
 
Fecha de Ingreso: octubre-2013
Mensajes: 3
Antigüedad: 11 años, 1 mes
Puntos: 0
Respuesta: Problema con INNERJOIN sumatoria no correcta.

Cita:
Iniciado por gnzsoloyo Ver Mensaje
No puedes usar una tabla de compras para realizar un JOIN contra una tabla ventas. SOn conceptos incompatibles. Ese tipo de resumen de movimiento se realiza de otro modo.
Por lo pronto, no puedes hacer un resumen de compras y ventas si usar la tabla productos, porque que tengas compras en un determinado período, no implica necesariamente que tengas ventas de ese producto, para el mismo período, y viceversa.
Ese tipo de resumenes se realiza, como dije, con la tabla Productos pero por medio de subconsultas donde obtienes los totales de cada concepto por separado:
Código MySQL:
Ver original
  1. SELECT t1.idarticulo, totalVentas, totalCompras, (totalCompras - totalVentas) SaldoExistencia
  2.     (SELECT p.idarticulo, SUM(vc.cantidad) totalVentas
  3.     FROM productos p LEFT JOIN ventas_corte vc ON p.idarticulo = vc.idarticulo
  4.     GROUP BY p.idarticulo) T1
  5.     INNER JOIN
  6.     (SELECT p.idarticulo,  SUM(compras.cantidad) TotalCompras
  7.     FROM FROM productos p LEFT JOIN compras c ON p.idarticulo = c.idarticulo
  8.     GROUP BY p.idarticulo) T2 ON T1.idarticulo = T2.idarticulo
  9. ORDER BY t1.idarticulo
¿Se entiende?
Este tema se ha tratado ya varias veces, y es un error de concepto muy habitual entre los que se inician.

Muchas gracias gnzsoloyo, son conceptos de join que apenas voy comprendiendo y gracias a ti acabo de terminar de comprender , te comento que si utilizo una tabla productos(articulos) y he cazado todas las tablas y ahora toda la consulta da el resultado tal cual lo necesito,muchas gracias de nuevo.

Etiquetas: group-by, inner-join, mysql+consulta, order-by
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 08:16.