Ver Mensaje Individual
  #3 (permalink)  
Antiguo 29/11/2011, 11:23
airknightz
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Problema para unir 3 tablas incluyendo la sentencia SUM

Disculpen, aquí les detallo el problema:
Tengo 3 tablas:
CREATE TABLE IF NOT EXISTS `planilla` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`codigo` varchar(50) COLLATE utf8_spanish_ci NOT NULL,
`nombre` varchar(150) COLLATE utf8_spanish_ci NOT NULL,
`stock` decimal(10,0) NOT NULL DEFAULT '0',
`medida` char(10) COLLATE utf8_spanish_ci DEFAULT NULL,
`tipo` varchar(10) COLLATE utf8_spanish_ci DEFAULT NULL,
`grupo` varchar(10) COLLATE utf8_spanish_ci DEFAULT NULL,
`posicion` varchar(100) COLLATE utf8_spanish_ci DEFAULT NULL,
`estado` varchar(100) COLLATE utf8_spanish_ci DEFAULT NULL,
`almacen` varchar(200) COLLATE utf8_spanish_ci DEFAULT NULL,
`comentario` varchar(200) COLLATE utf8_spanish_ci DEFAULT NULL,
`user` int(11) DEFAULT NULL,
`sis` int(1) DEFAULT NULL,
`captura1` int(11) DEFAULT NULL,
`conteo1` decimal(10,0) DEFAULT '0',
`ubicacion1` char(10) COLLATE utf8_spanish_ci DEFAULT NULL,
`captura2` int(11) DEFAULT NULL,
`conteo2` decimal(10,0) DEFAULT '0',
`ubicacion2` char(10) COLLATE utf8_spanish_ci DEFAULT NULL,
`captura3` int(11) DEFAULT NULL,
`conteo3` decimal(10,0) DEFAULT '0',
`ubicacion3` char(10) COLLATE utf8_spanish_ci DEFAULT NULL,
`captura4` int(11) DEFAULT NULL,
`conteo4` decimal(10,0) DEFAULT '0',
`ubicacion4` char(10) COLLATE utf8_spanish_ci DEFAULT NULL,
`captura5` int(11) DEFAULT NULL,
`conteo5` decimal(10,0) DEFAULT '0',
`ubicacion5` char(10) COLLATE utf8_spanish_ci DEFAULT NULL,
`captura6` int(11) DEFAULT NULL,
`conteo6` decimal(10,0) DEFAULT '0',
`ubicacion6` char(10) COLLATE utf8_spanish_ci DEFAULT NULL,
`captura7` int(11) DEFAULT NULL,
`conteo7` decimal(10,0) DEFAULT '0',
`ubicacion7` char(10) COLLATE utf8_spanish_ci DEFAULT NULL,
`captura8` int(11) DEFAULT NULL,
`conteo8` decimal(10,0) DEFAULT '0',
`ubicacion8` char(10) COLLATE utf8_spanish_ci DEFAULT NULL,
PRIMARY KEY (`id`,`codigo`),
UNIQUE KEY `id_UNIQUE` (`id`),
KEY `fk_planilla_1` (`user`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci;

CREATE TABLE IF NOT EXISTS `salida` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`numero` varchar(50) COLLATE utf8_spanish_ci NOT NULL,
`fecha` datetime DEFAULT NULL,
PRIMARY KEY (`id`,`numero`),
UNIQUE KEY `id_UNIQUE` (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci;

CREATE TABLE IF NOT EXISTS `salida_detalle` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`numero` varchar(50) COLLATE utf8_spanish_ci NOT NULL,
`codigo` varchar(50) COLLATE utf8_spanish_ci NOT NULL,
`cantidad` int(11) NOT NULL DEFAULT '0',
`costo` decimal NOT NULL DEFAULT '0',
UNIQUE KEY `id_UNIQUE` (`id`),
FOREIGN KEY (`numero`) REFERENCES salida(`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci;

CREATE TABLE IF NOT EXISTS `entrada` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`numero` varchar(50) COLLATE utf8_spanish_ci NOT NULL,
`fecha` datetime DEFAULT NULL,
PRIMARY KEY (`id`,`numero`),
UNIQUE KEY `id_UNIQUE` (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci;

CREATE TABLE IF NOT EXISTS `entrada_detalle` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`numero` varchar(50) COLLATE utf8_spanish_ci NOT NULL,
`codigo` varchar(50) COLLATE utf8_spanish_ci NOT NULL,
`cantidad` int(11) NOT NULL DEFAULT '0',
`costo` decimal NOT NULL DEFAULT '0',
UNIQUE KEY `id_UNIQUE` (`id`),
FOREIGN KEY (`numero`) REFERENCES entrada(`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci;

Y requiero hacer una consulta que me muestre los campos de la tabla planilla más los totales en salidas detalles y entradas detalles agrupados por el campo codigo (que hace referencia a un Item).

He realizado la siguiente consulta, pero me arroja distintos valores( con referencia a totales en salida_detalle y entrada_detalle) a los que se existen en la BDD:

SELECT p.id, p.codigo, p.nombre, p.stock, p.medida, p.tipo, p.grupo, p.posicion, p.estado, p.sis, p.almacen, p.captura1, p.ubicacion1, p.conteo1, p.captura2, p.ubicacion2, p.conteo2, p.captura3, p.ubicacion3, p.conteo3, p.captura4, p.ubicacion4, p.conteo4, captura5, p.ubicacion5, p.conteo5, captura6, p.ubicacion6, p.conteo6, p.captura7, p.ubicacion7, p.conteo7, p.captura8, p.ubicacion8, p.conteo8, SUM(s.cantidad) AS TOTAL_SALIDA, SUM(e.cantidad) AS TOTAL_ENTRADA FROM planilla AS p LEFT JOIN salida_detalle AS s ON p.codigo=s.codigo LEFT JOIN entrada_detalle AS e ON p.codigo = e.codigo WHERE p.sis = 0 GROUP BY p.codigo ORDER BY p.codigo";