update inner join mysql_Mysql update inner join
一:需求
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 = ?;
update inner join mysql_Mysql update inner join相关推荐
- 【转载】SQL中使用update inner join和delete inner join
原文地址:SQL中使用update inner join和delete inner join Update XXX set XXX where 这种写法大家肯定都知道,才发现update和delete ...
- mysql update join 更新_mysql多表join时候update更新数据的方法 | 很文博客
如果item表的name字段为''就用resource_library 表的resource_name字段前面加上字符串Review更新它,他们的关联关系在表resource_review_link中 ...
- Mysql: 图解 inner join、left join、right join、full outer join、union、union all的区别
对于SQL的Join,在学习起来可能是比较乱的.我们知道,SQL的Join语法有很多inner的,有outer的,有left的,有时候,对 于Select出来的结果集是什么样子有点不是很清楚.Codi ...
- 图解SQL inner join、left join、right join、full outer join、union、union all的区别
对于SQL的Join,在学习起来可能是比较乱的.我们知道,SQL的Join语法有很多inner的,有outer的,有left的,有时候,对 于Select出来的结果集是什么样子有点不是很清楚.Codi ...
- 1.19.5.4.流上的Join、常规Join、时间区间Join、时态表Join、基于处理时间的时态Join、时态表函数Join、用法
1.19.5.4.流上的Join 1.19.5.4.1.常规Join 1.19.5.4.2.时间区间Join 1.19.5.4.3.时态表Join 1.19.5.4.4.基于处理时间的时态Join 1 ...
- left join 和 left outer join 的区别
老是混淆,做个笔记,转自:https://www.cnblogs.com/xieqian111/p/5735977.html left join 和 left outer join 的区别 通俗的讲: ...
- left join 和 left outer join 有什么区别
left join 是left outer join的简写,left join默认是outer属性的. Inner Join 逻辑运算符返回满足第一个(顶端)输入与第二个(底端)输入联接的每一行.这个 ...
- left join 与left outer join的区别
joinn 语句有三种: inner join, left outer join 和 right outer join 都可以简写,分别为join,left join,right join. 转载于: ...
- 转载:left join和left semi join的联系和区别
1.联系 他们都是 hive join 方式的一种,join on 属于 common join(shuffle join/reduce join),而 left semi join 则属于 map ...
最新文章
- AI一分钟 | 谷歌租下北京 6000 平米写字楼,或将发展AI项目;工信部就个人信息保护约谈百度、支付宝、今日头条
- 在 Ubuntu 14.04/15.04 上配置 Node JS v4.0.0
- ipv6host更新
- ABAP 时间月份的F4帮助
- 零基础学Python(第八章 for循环·超重点,本章会有几个简单的单层循环练习,后续会有针对算法的单独章节)
- Qt学习笔记-----事件
- voxblox建图教程
- VS2013 int main(int argc, char** argv)参数传递
- JavaScript基本资料
- Carryon的字符串
- python导入模块中的对象_详解Python项目开发时自定义模块中对象的导入和使用
- 拉普拉斯矩阵(Laplacian Matrix) 及半正定性证明
- TMS320F28335 和 VS1003B 之间的通信
- 11.4王者荣耀服务器维护中,英雄战迹11号更新维护公告 删档最后一更
- 联想笔记本加固态后没声音(关于固态那些事)
- 手握13本书、老司机超出120年经验的公众号
- 用卷积神经网络实现对小狗品种的识别
- ML-Agents案例之双人足球
- 将 Jar 包打成一个 Jar 包
- MAC系统 如何显示隐藏的文件(文件夹)
热门文章
- linux 软件包管理设置,Linux速通08 网络原理及基础设置、软件包管理
- 深入jvm虚拟机第4版_深入理解JVM虚拟机
- [蓝桥杯][算法提高]和谐宿舍2(记忆化搜索)
- Longest k-Good Segment CodeForces - 616D(尺取法)
- [蓝桥杯][算法提高VIP]种树(dfs)
- Mac osx系统中virtual box 中的Ubuntu系统的全屏显示问题解决
- 深度学习之卷积神经网络(2)卷积神经网络结构
- org.apache.hadoop.hbase.ClockOutOfSyncException
- 基于python的HOG+SVM目标检测算法实现
- 两个实用的Python的装饰器