Mysql update inner join
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Mysql update inner join,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2398字,纯文字阅读大概需要4分钟。
内容图文
一:需求
A表和B表的表结构相同,A表是历史表,B表是增量数据表;想要根据关联条件更新A表中的数据。
二:表结构
CREATE TABLE `A` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`bid` bigint(20) NOT NULL ,
`sid` bigint(20) NOT NULL ,
`grid` bigint(20) NOT NULL ,
`age` bigint(20) NOT NULL ,
`pv` bigint(20) NOT NULL ,
`uv` bigint(20) NOT NULL ,
`pay_count` bigint(20) NOT NULL,
`charge_amount` bigint(20) NOT NULL ,
`last_pay_count` bigint(20) NOT NULL ,
`last_charge_amount` bigint(20) NOT NULL ,
`ftime` bigint(20) NOT NULL ,
`dtime` bigint(20) NOT NULL DEFAULT ‘0‘ COMMENT ‘详细时间(yyyyMMddHH)‘
PRIMARY KEY (`id`,`ftime`),
KEY `IX_FTIME` (`ftime`) USING BTREE,
KEY `IX_HTIME` (`htime`) USING BTREE,
KEY `IX_DTIME` (`dtime`),
KEY `IX_B_F_S_G` (`bid`,`ftime`,`sid`,`grid`),
KEY `IX_B_S_G` (`bid`,`sid`,`grid`),
KEY `IX_B_D_S` (`bid`,`dtime`,`sid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
注意:mysql 只有2种索引(BTREE 和 HASH)
三:注意
1、只更新A表的部分字段:pv、uv和pay_amount
2、确定唯一一条记录的关联字段是:bid、sid、dtime、qrid
四:实现
1、使用inner join实现
UPDATE A as aa
INNER JOIN B as bb ON bb.bid = aa.bid
AND bb.sid=aa.sid
AND bb.grid=aa.grid
SET aa.pv=bb.pv,
aa.uv=bb.uv,
aa.pay_amount=bb.pay_amount
WHERE aa.dtime=?
AND aa.bid=? ;
2、使用exists实现
UPDATE A aa
SET aa.pv = (SELECT bb.pv
FROM B bb
WHERE bb.bid = aa.bid
AND bb.sid = aa.sid
AND bb.grid = aa.grid),
aa.uv = (SELECT bb.uv
FROM B bb
WHERE bb.bid = aa.bid
AND bb.sid = aa.sid
AND bb.grid = aa.grid),
aa.pay_amount = (SELECT bb.pay_amount
FROM B bb
WHERE bb.bid = aa.bid
AND bb.sid = aa.sid
AND bb.grid = aa.grid)
WHERE EXISTS (SELECT 1
FROM B bb
WHERE bb.bid = aa.bid
AND bb.sid = aa.sid
AND bb.grid = aa.grid)
AND aa.dtime = ?
AND aa.bid = ?;
Mysql update inner join
标签:字段 charset select 使用 utf8 update innodb table incr
本文系统来源:https://www.cnblogs.com/zhangzhiping35/p/12066887.html
内容总结
以上是互联网集市为您收集整理的Mysql update inner join全部内容,希望文章能够帮你解决Mysql update inner join所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。