Ver Mensaje Individual
  #1 (permalink)  
Antiguo 25/06/2015, 16:14
Avatar de ortiz3436
ortiz3436
 
Fecha de Ingreso: junio-2015
Ubicación: Mexico
Mensajes: 2
Antigüedad: 8 años, 10 meses
Puntos: 0
Información unir varias tablas con inner join

Hola.
Mi duda es la siguiente: Tengo 4 Tablas

Tabla Ventas con los campos
codigo,cantidad,fecha,unitario

Tabla Productos
codigo, nombre

Tabla Almacen
codigo, cantidad, fecha

Tabla Pedido
codigo, solicitado, fecha

Necesito hacer un sistema de pedidos para abastecer un almacen dependiendo de los faltantes. Al momento de hacer la sintaxis sql la cual explico

Relaciono el codigo de almacen con el codigo de productos donde está almacenado el nombre del producto, luego relaciono la tabla pedido con la tabla productos para que me muestre la cantidad de productos que solicité como pedido para abastecer. y al final relacione la tabla ventas para que me muestre la cantidad de productos que
se han vendido de cada uno en un rango de fecha determinado para que en base a las ventas que haya tenido cada producto solicitar un aproximado para compra.
Agrupo por codigo de almacen porque un mismo producto lo tengo insertado varias veces dependiendo del costo que haya tenido por las variaciones de precios.
y lo agrupo también por codigo de ventas porque en la tabla ventas existe varias veces el mismo producto pero con fechas de ventas diferentes.
Código SQL:
Ver original
  1. SELECT almacen.codigo, SUM(ventas.cantidad) AS can, SUM(almacen.cantidad) AS cantidadd,
  2. productos.producto, pedido.solicitado FROM (almacen INNER JOIN productos ON
  3. almacen.codigo=productos.codigo) LEFT JOIN pedido ON almacen.codigo=pedido.codigo  AND
  4. DATE_FORMAT(pedido.fecha, '%Y-%m-%d')='$fecha' LEFT JOIN ventas ON almacen.codigo=ventas.codigo
  5. AND DATE_FORMAT(ventas.fecha, '%Y-%m-%d') BETWEEN '$fechahorapas' AND '$fecha'  
  6. GROUP BY almacen.codigo, ventas.codigo ORDER BY productos.producto

En el resultado me da por ejemplo


El único problema es que en ventas de Paracetamol solo son 29 y no 58. y no se como hacerle para que me de realmente los 29 y no me los duplique.

En este ejemplo de una parte del código si me da el valor correcto
Código SQL:
Ver original
  1. SELECT codigo, SUM(cantidad) AS can, fecha FROM ventas
  2. WHERE DATE_FORMAT(ventas.fecha, '%Y-%m-%d') BETWEEN '$fechahorapas'
  3. AND '$fecha' GROUP BY codigo


Pero necesito unir todo el codigo.
Le agradezco de antemano todas las ideas que me puedan proporcionar

Última edición por gnzsoloyo; 02/07/2015 a las 11:28