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

Query Inventario

Estas en el tema de Query Inventario en el foro de Mysql en Foros del Web. Hola Espero q me puedan ayudar. Este es el diseño de la base de datos El problema que tengo es con el siguiente query Código: ...
  #1 (permalink)  
Antiguo 29/01/2012, 17:24
 
Fecha de Ingreso: enero-2012
Mensajes: 3
Antigüedad: 12 años, 3 meses
Puntos: 0
Query Inventario

Hola Espero q me puedan ayudar. Este es el diseño de la base de datos


El problema que tengo es con el siguiente query

Código:
SELECT p.id, p.descripcion, SUM( de.cant ) , SUM(dv.cant)
FROM producto p, detalleentrega de, detalleventa dv,entrega e,venta v,cliente c
where 
                    de.idproducto in 
                                  (select p.id from producto p, detalleentrega de, detalleventa dv 
                                  where dv.idproducto=p.id and de.idproducto=p.id
                                  )
and
                    dv.idproducto in 
                                  (select p.id from producto p, detalleentrega de, detalleventa dv 
                                  where dv.idproducto=p.id and de.idproducto=p.id
                                  )
and
                    e.id=de.idEntrega
and
                    v.id=dv.idventa
and
                    c.id=e.idcliente
and
                    c.id=v.idcliente
and  
                    c.id='C-001'
El problema es que el query me devuelve datos pero repetidos, creo q me falta una condicion en el query o en el subquery pero noc donde, estaba haciendo pruebas pero me siguen saliendo repetidos , si alguien sabe como puedo eliminar los datos repetidos o como puedo sacar un reporte en donde el cual muestre el id del producto, la cantidad vendida, la cantidad entregada,y el stock q existe.

Gracias de antemano

Leo.
  #2 (permalink)  
Antiguo 29/01/2012, 17:57
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, 5 meses
Puntos: 2658
Respuesta: Query Inventario

Hacer ese cálculo, donde trabajas con dos canales de datos distintos (venta y entrega se relacionan, pero no componen la misma cadena de dependencias), implica realizar operaciones intermedias que no puedes juntar en una misma.
Cuando lo haces, cuando juntas indiscriminadamente una operación de venta con la entrega del material, terminas refiriéndote al mismo producto dos veces: Una vez cuando sumas la venta y otra cuando sumas la entrega... Por eso se produce un producto cartesiano.
Cuando trabajas en BBDD tienes que tener en cuenta la lógica de las dependencias, y la lista de productos entregados se relaciona con la lista de productos vendidos por sus cabeceras de definición (Venta y Entrega), no por sus detalles sumados.
Es un poco difícil de ver cuando no has estudiado algo de álgebra de Boole y de álgebra relacional.
La idea es que debes hacer las dos consultas por separado en el from, y luego hacer el JOIN de los resultados, no de las tablas base:
Código MySQL:
Ver original
  1.     p.id,
  2.     p.descripcion,
  3.     vendidos,
  4.     IFNULL(entregados, 0) entregados
  5.     (SELECT P.ID, SUM(DV.cant) vendidos, V.idcliente
  6.     FROM poducto P
  7.         INNER JOIN detalleventa DV ON p.ID = DV.idproducto
  8.         INNER JOIN ventas V ON dv.idventa = V.id
  9.     GROUP BY P.ID, V.idcliente) T1
  10.     LEFT JOIN
  11.     (SELECT P.ID, SUM(DE.cant) entregados, E.idcliente
  12.     FROM productos P
  13.         INNER JOIN detalleentrega DE ON p.ID = DE.idproducto
  14.         INNER JOIN entregas E ON DE.identrega = e.id
  15.     GROUP BY P.ID, E.idcliente) T2 ON T1.ID = T2.ID AND T1.idcliente = T2.idcliente
  16.     T1.idcliente = 'C-001';

Por otro lado, la tabla Cliente es innecesaria porque el ID que buscas ya se encuentra en las cabeceras, y esa tabla no agrega ni saca nada.
__________________
¿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 30/01/2012, 10:40
 
Fecha de Ingreso: enero-2012
Mensajes: 3
Antigüedad: 12 años, 3 meses
Puntos: 0
Respuesta: Query Inventario

Gracias gnzsoloyo me ayudaste a entender lo que necesitaba, en cuanto al JOIN voy a tratar aprender a usarlo jejeje.

Gracias

Etiquetas: inventario, query, query-complejo, stock
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 07:17.