select a.id, a.name, a.price, sum(c.num), sum(d.num) from a , b b1, b b2, c , d where a.id = b1.aid and b1.id = c.bid and a.id = b2.aid and b2.id = d.bid
多谢回复! 这种查询和JOIN合计出来的结果都会存在重复的合计
-- ---------------------------- -- Table structure for `a` -- ---------------------------- DROP TABLE IF EXISTS `a`; CREATE TABLE `a` ( `id` int(10) NOT NULL AUTO_INCREMENT, `name` varchar(20) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1;-- ---------------------------- -- Records of a -- ---------------------------- INSERT INTO `a` VALUES ('1', 'aaaa'); INSERT INTO `a` VALUES ('2', 'bbbb'); INSERT INTO `a` VALUES ('3', 'ccccc');-- ---------------------------- -- Table structure for `b` -- ---------------------------- DROP TABLE IF EXISTS `b`; CREATE TABLE `b` ( `id` int(10) NOT NULL AUTO_INCREMENT, `aid` int(10) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1;-- ---------------------------- -- Records of b -- ---------------------------- INSERT INTO `b` VALUES ('1', '1'); INSERT INTO `b` VALUES ('2', '2'); INSERT INTO `b` VALUES ('3', '3');-- ---------------------------- -- Table structure for `c` -- ---------------------------- DROP TABLE IF EXISTS `c`; CREATE TABLE `c` ( `id` int(10) NOT NULL AUTO_INCREMENT, `bid` int(10) DEFAULT NULL, `num` int(10) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=latin1;-- ---------------------------- -- Records of c -- ---------------------------- INSERT INTO `c` VALUES ('1', '1', '5'); INSERT INTO `c` VALUES ('2', '2', '1'); INSERT INTO `c` VALUES ('3', '3', '2'); INSERT INTO `c` VALUES ('4', '1', '4'); INSERT INTO `c` VALUES ('5', '3', '2');-- ---------------------------- -- Table structure for `d` -- ---------------------------- DROP TABLE IF EXISTS `d`; CREATE TABLE `d` ( `id` int(10) NOT NULL AUTO_INCREMENT, `bid` int(10) DEFAULT NULL, `num` int(10) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=latin1;-- ---------------------------- -- Records of d -- ---------------------------- INSERT INTO `d` VALUES ('1', '1', '1'); INSERT INTO `d` VALUES ('2', '3', '2'); INSERT INTO `d` VALUES ('3', '1', '1'); INSERT INTO `d` VALUES ('4', '2', '4'); INSERT INTO `d` VALUES ('5', '2', '1');试一下这个表结构。
where a.id = b1.aid and b1.id = c.bid and a.id = b2.aid and b2.id = d.bid
这种查询和JOIN合计出来的结果都会存在重复的合计
-- ----------------------------
-- Table structure for `a`
-- ----------------------------
DROP TABLE IF EXISTS `a`;
CREATE TABLE `a` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`name` varchar(20) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1;-- ----------------------------
-- Records of a
-- ----------------------------
INSERT INTO `a` VALUES ('1', 'aaaa');
INSERT INTO `a` VALUES ('2', 'bbbb');
INSERT INTO `a` VALUES ('3', 'ccccc');-- ----------------------------
-- Table structure for `b`
-- ----------------------------
DROP TABLE IF EXISTS `b`;
CREATE TABLE `b` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`aid` int(10) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1;-- ----------------------------
-- Records of b
-- ----------------------------
INSERT INTO `b` VALUES ('1', '1');
INSERT INTO `b` VALUES ('2', '2');
INSERT INTO `b` VALUES ('3', '3');-- ----------------------------
-- Table structure for `c`
-- ----------------------------
DROP TABLE IF EXISTS `c`;
CREATE TABLE `c` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`bid` int(10) DEFAULT NULL,
`num` int(10) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=latin1;-- ----------------------------
-- Records of c
-- ----------------------------
INSERT INTO `c` VALUES ('1', '1', '5');
INSERT INTO `c` VALUES ('2', '2', '1');
INSERT INTO `c` VALUES ('3', '3', '2');
INSERT INTO `c` VALUES ('4', '1', '4');
INSERT INTO `c` VALUES ('5', '3', '2');-- ----------------------------
-- Table structure for `d`
-- ----------------------------
DROP TABLE IF EXISTS `d`;
CREATE TABLE `d` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`bid` int(10) DEFAULT NULL,
`num` int(10) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=latin1;-- ----------------------------
-- Records of d
-- ----------------------------
INSERT INTO `d` VALUES ('1', '1', '1');
INSERT INTO `d` VALUES ('2', '3', '2');
INSERT INTO `d` VALUES ('3', '1', '1');
INSERT INTO `d` VALUES ('4', '2', '4');
INSERT INTO `d` VALUES ('5', '2', '1');试一下这个表结构。