Ver Mensaje Individual
  #1 (permalink)  
Antiguo 25/05/2011, 09:48
razor7_996
 
Fecha de Ingreso: mayo-2011
Mensajes: 7
Antigüedad: 13 años
Puntos: 0
Duplicados en consulta con INNER JOIN en misma tabla

Hola, estoy intentando obtener un resultado que involucra 3 tablas (productos, productosprecios, productosstockmovimientos). Necesito obtener de la tabla Productos, el campo Codigo, de la tabla productosprecios el Precio de Tipo 1 y el Precio de Tipo 2 y aqui lo mas dificil, necesito sumar la Cantidad de Tipo 0 y restarle la Cantidad de Tipo 1 de la tabla productosstockmovimientos

El resultado que busco es este
Código:
Codigo    PrecioGremio    PrecioPublico    Stock
3001704   18.36               0                2
Estos son algunos de los campos de las tablas, para el producto con Codigo 3001704

Tabla productos, para el producto Codigo 3001704
Código:
RecID                   Codigo 	
8,%53y#|!!4¢         3001704
Tabla productosprecios para el IDProducto 8,%53y#|!!4¢
Código:
RecID              	IDProducto 	Precio 	NroLista
8,%53y$z!!4ƒ 	8,%53y#|!!4¢          	18.36 	1
8,%53y$|!!4¨ 	8,%53y#|!!4¢          	0 	2
8,%53y$~!!4l 	8,%53y#|!!4¢          	0 	3
8,%53y$€!!4¸ 	8,%53y#|!!4¢          	0 	4
8,%53y$¢!!4µ 	8,%53y#|!!4¢          	0 	5
8,%53y$£!!4^ 	8,%53y#|!!4¢           	0 	6
Tabla productosstockmovimientos para el IDProducto 8,%53y#|!!4¢
Código:
RecID            IDProducto     IDDeposito         IDFiscal    Cantidad  Tipo
8,(&4fyæ!!#1 	8,%53y#|!!4¢ 	8,&?5ouƒ!!#< 	8+&,-5]=!!#÷ 	1 	0
8,*%,<71!!4m 	8,%53y#|!!4¢ 	8,&?5ouƒ!!#< 	8*-:.ha1!!#^ 	2 	0
8,*%,<`(!!4¿ 	8,%53y#|!!4¢ 	8,&?5ouƒ!!#< 	8+&,-5]=!!#÷ 	2 	1
8,,&11.k!!4i 	8,%53y#|!!4¢ 	8,&?5ouƒ!!#< 	8+&,-5]=!!#÷ 	1 	1
8.(<0=$»!!#< 	8,%53y#|!!4¢ 	8,&?5ouƒ!!#< 	8*-:.ha1!!#^ 	10 	0
8.(<0>6!!!#x 	8,%53y#|!!4¢ 	8,&?5ouƒ!!#< 	8*-:.ha1!!#^ 	10 	1
8.(<0fa¬!!#s 	8,%53y#|!!4¢ 	8,&?5ouƒ!!#< 	8*-:.ha1!!#^ 	5 	0
8.(<0gnc!!#4 	8,%53y#|!!4¢ 	8,&?5ouƒ!!#< 	8*-:.ha1!!#^ 	3 	1
Esta consulta me funciona, me trae exactamente lo que necesito para el IDProducto 8,%53y#|!!4¢ y para todos los productos de la tabla productos pero no me parece para nada elegante. Fijense que para la columna Stock, tengo que hacer un SELECT anidado en el sector de columnas de resultado, al comienzo del SELECT principal.

Me pregunto si alguien sabe si se puede hacer a puro JOIN.

Código MySQL:
Ver original
  1. SELECT prod.Codigo
  2.      , pp1.Precio AS PrecioGremio
  3.      , pp2.Precio AS PrecioPublico
  4.      , ( SELECT (SUM(pm1.Cantidad) -
  5.                   (
  6.                     SELECT SUM(pm2.Cantidad)
  7.                     FROM productosstockmovimientos AS pm2
  8.                     WHERE pm2.IDProducto = prod.RecID AND pm2.Tipo=1
  9.                   )
  10.                 )
  11.          FROM productosstockmovimientos AS pm1
  12.          WHERE pm1.IDProducto = prod.RecID AND pm1.Tipo=0
  13.        ) AS Stock
  14. FROM productos AS prod
  15.   JOIN productosprecios AS pp1
  16.     ON prod.RecID = pp1.IDProducto
  17.     AND pp1.NroLista = 1
  18.   JOIN productosprecios as pp2
  19.     ON prod.RecID = pp2.IDProducto
  20.     AND pp2.NroLista = 2
  21. WHERE prod.Inhabilitado = 0 AND prod.RecID = '8,%53y#|!!4¢'
  22. ORDER BY prod.Codigo ASC

Desde ya muchas gracias!