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

unir varias tablas con inner join

Estas en el tema de unir varias tablas con inner join en el foro de Bases de Datos General en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 25/06/2015, 16:14
Avatar de ortiz3436  
Fecha de Ingreso: junio-2015
Ubicación: Mexico
Mensajes: 2
Antigüedad: 9 años, 5 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
  #2 (permalink)  
Antiguo 25/06/2015, 22:59
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 3 meses
Puntos: 2237
Respuesta: unir varias tablas con inner join

Tu problema no es de PHP, sino de base de datos; como no queda claro el motor que estás usando, muevo el tema a Base de Datos General.
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 26/06/2015, 13:32
 
Fecha de Ingreso: junio-2015
Ubicación: Bogota
Mensajes: 18
Antigüedad: 9 años, 5 meses
Puntos: 0
Respuesta: unir varias tablas con inner join

puedes poner un pantallazo de una consulta que devuelva los datos que hay en la tabla ventas?
  #4 (permalink)  
Antiguo 02/07/2015, 11:00
Avatar de ortiz3436  
Fecha de Ingreso: junio-2015
Ubicación: Mexico
Mensajes: 2
Antigüedad: 9 años, 5 meses
Puntos: 0
Respuesta: unir varias tablas con inner join

Anexo la Tabla Ventas completa


Y Agrego tambien un search del codigo
7503001007663 de la tabla almacen porque para poner toda la tabla son muchos datos.
Es aquí donde creo que es el motivo del cual me duplica los datos de ventas al usar JOIN aunque si fuera posible tendría que Usar UNION aunque tampoco logro hacer la sintaxis correcta.


Gracias de antemano
  #5 (permalink)  
Antiguo 27/07/2015, 09:05
 
Fecha de Ingreso: marzo-2015
Mensajes: 183
Antigüedad: 9 años, 8 meses
Puntos: 8
Respuesta: unir varias tablas con inner join

Deberías agruparlo por el código del almacén y el código del producto.
  #6 (permalink)  
Antiguo 27/07/2015, 12:49
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: unir varias tablas con inner join

Aqui lo que parece es que estas haciendo un producto cartesiano con alguna de las tablas, por lo que te duplica la informacion, te recomiendo que vayas depurando tu query quitando tablas del mismo para que veas donde es donde se te duplican los registros :)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me

Etiquetas: fecha, join, php, select, sql, tabla, tablas
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:18.