MySQL多表更新实例

3 篇文章 0 订阅

MySQL多表更新实例


更新`t_total`表中total列的结果:total减去与表`t_detail`中相应的model_name和year_month下的所有count的值。

1、建表 `t_total`

-- ----------------------------
-- Table structure for `t_total`
-- ----------------------------
DROP TABLE IF EXISTS `t_total`;
CREATE TABLE `t_total` (
  `model_name` varchar(20) NOT NULL,
  `year_month` varchar(10) NOT NULL,
  `total` int(8) NOT NULL,
  PRIMARY KEY (`model_name`,`year_month`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk;


-- ----------------------------
-- Records of t_total
-- ----------------------------
INSERT INTO `t_total` VALUES ('000', '2012-01', '2000');
INSERT INTO `t_total` VALUES ('000', '2012-02', '2820');
INSERT INTO `t_total` VALUES ('111', '2012-01', '5000');
INSERT INTO `t_total` VALUES ('111', '2012-02', '6000');


2、建表`t_detail`

-- ----------------------------
-- Table structure for `t_detail`
-- ----------------------------
DROP TABLE IF EXISTS `t_detail`;
CREATE TABLE `t_detail` (
  `model_name` varchar(20) NOT NULL,
  `year_month` varchar(10) NOT NULL,
  `day_seq` varchar(2) NOT NULL,
  `count` int(8) NOT NULL,
  PRIMARY KEY (`model_name`,`year_month`,`day_seq`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk;


-- ----------------------------
-- Records of t_detail
-- ----------------------------
INSERT INTO `t_detail` VALUES ('000', '2012-01', '1', '50');
INSERT INTO `t_detail` VALUES ('000', '2012-01', '2', '30');
INSERT INTO `t_detail` VALUES ('000', '2012-01', '3', '40');
INSERT INTO `t_detail` VALUES ('000', '2012-02', '1', '60');
INSERT INTO `t_detail` VALUES ('000', '2012-02', '2', '50');
INSERT INTO `t_detail` VALUES ('000', '2012-02', '3', '70');


3、编写SQL语句并执行

update
#select t.model_name, t.`year_month`, t.total, hd.he, t.total-hd.he jian from 
t_total t, 
(
select d.model_name, d.`year_month`, d.day_seq, d.count, sum(d.count) he
from t_detail d
group by d.model_name, d.`year_month`) hd
set t.total=t.total-hd.he
where t.model_name=hd.model_name
and t.`year_month`=hd.`year_month`


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值