SQL - Solución consulta con INNER JOIN

 
Vista:
sin imagen de perfil

Solución consulta con INNER JOIN

Publicado por David M. Córdova (1 intervención) el 16/04/2016 18:11:58
Buenos días.

Tengo una consulta en MySQL que me arroja cantidades mayores a los que tengo registrados y quisiera saber porque me arroja eso. El código es el siguiente.

SELECT sum(cantidad) as cantidad, precio, preciocompra
FROM venta_has_articulo as vha
JOIN preciocompra as pc ON pc.iddescripcionarticulo = vha.iddescripcionarticulo
JOIN venta ON venta.idventa = vha.idventa
WHERE venta.fecha BETWEEN '2016-04-11' AND '2016-04-11' AND venta.idsucursal = 7
GROUP BY vha.iddescripcionarticulo

Los resultados correctos me los arroja con la siguiente consulta.

SELECT iddescripcionarticulo, sum(cantidad) FROM venta_has_articulo as vha
JOIN venta ON venta.idventa = vha.idventa
WHERE fecha BETWEEN '2016-04-11' AND '2016-04-11' AND venta.idsucursal = 7
GROUP BY vha.iddescripcionarticulo

Entonces la cuestion está al agregarle el JOIN de precio compra.

Les agradecería mucho que me ayudaran con esa pequeña duda.

De antemano, muchas gracias.
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
sin imagen de perfil
Val: 2
Ha disminuido su posición en 204 puestos en SQL (en relación al último mes)
Gráfica de SQL

Solución consulta con INNER JOIN

Publicado por Gonzalo (21 intervenciones) el 17/04/2016 02:14:52
1
Entonces la cuestion está al agregarle el JOIN de precio compra.

SI tienes una tabla donde almacenas los precios de compra de los productos, y pretendes usarla para incluir el precio original del producto, debes filtrar por aquellos precios de compra que correspondan al periodo donde se hace la venta (suponiendo que diseñaste bien la tabla de precios y recordaste poner un campo fecha).
En otras palabras, sólo debes tomar las compras de productos que sean anteriores a la venta (la ultima antes de la venta), y que tampoco tome las posteriores a la misma venta. No es una consulta para quien recien se inicia...
Ten en cuenta que si tienes N compras de un mismo producto en el tiempo, y simplemente relacionas las ventas de ese producto por el ID de producto, te devolverá la venta del mismo una vez por cada compra del producto que haya, en cualquier momento del tiempo, sin importar si se corresponden o no.

Lo que tu query no considera es simplemente que la relación entre producto y compra del producto es 1:N, y NO 1:1.

¿Se entiende?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Solución consulta con INNER JOIN

Publicado por David M (4 intervenciones) el 28/04/2016 10:48:18
Muchas gracias. Me sirvió la respuesta, pero ahora tengo otro asunto en el cual quisiera puedan apoyarme.

Tengo la siguiente consulta, pero al ejecutarla con PHP me arroja un 500 Error Internal Server y al ejecutar la misma consulta en phpMyAdmin, en diferentes servidores, uno me arroja Error Codigo 500 y otro de plano se cuelga y no muestra resultado.

Original:

SELECT descripcionarticulo.*, venta_has_articulo.*, SUM(venta_has_articulo.cantidad) as totalvendidos
from venta_has_articulo
inner join venta on venta.referencia = venta_has_articulo.referencia
inner JOIN descripcionarticulo on descripcionarticulo.iddescripcionarticulo = venta_has_articulo.iddescripcionarticulo
WHERE venta.idadministrador = 6 and venta.eliminado = 0 and venta.fecha = '2016-04-27' and venta.idformapago = 4
GROUP BY descripcionarticulo.descripcion
ORDER BY descripcionarticulo.descripcion ASC

Queriendo corregirla:

SELECT da.*, vha.precio, SUM(vha.cantidad) as totalvendidos
from venta_has_articulo as vha
inner join venta on venta.referencia = vha.referencia
inner JOIN descripcionarticulo as da on da.iddescripcionarticulo = vha.iddescripcionarticulo
WHERE venta.idadministrador = 6 and venta.eliminado = 0 and venta.fecha = '2016-04-27' and venta.idformapago = 4
GROUP BY da.descripcion
ORDER BY da.descripcion ASC

De antemano, muchas gracias por su interés y ayuda.
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