背景
有一天,项目经理飞哥心急火燎地来找我,我一看这架势就是有大事发生啊,我虽然表面淡定,但心里慌得一批,心里瞬间浮现一万个可能性……
飞哥说:“小米,生产环境的管理系统出现大问题了,在员工列表页面出现,部门树和右侧的员工数量对不上,明天集团要给各个子公司发福利活动,员工对不上没法统计,你要抓紧时间搞定啊!”
我说:“放心吧,飞哥,我这就去看看,保证完成任务”,其实心里打鼓,硬着头皮上吧。
问题描述
登录生产环境的管理系统,查看报表,点击左侧的开发部,发现部门树上面写的是“开发部60人”,而右侧的分页列表只有50条,还差10条。
分析问题
首先确定左侧部门的人数是如何算出来的,经发现员工表中有一字段专门存员工数,DDL截图如下:
发现在部门表中“employee_num”字段为60,而员工表中该部门求和为50。
解决问题
为了快速修复这个问题,我想写一个sql语句通过汇总员工表中的人数直接插入到对应部门表中。sql语句如下所示:
执行完之后,发现部门的员工数对应上了,搞定!
MYSQLUPDATEJOIN
在日常项目中,我们经常使用JOIN来查询具有(在某种情况下INNERJOIN)或可能没有(在这种情况下LEFTJOIN)另一个表中的行的表中的行。在MySQL中,我们可以使用UPDATE语句中的JOIN子句来执行跨表更新。
语法
MySQLUPDATEJOIN语法:
在子句后面指定主表(T1)和主表要加入的表(T2)UPDATE。请注意,必须在UPDATE子句后指定至少一个表。表中未在UPDATE子句后指定的数据将不会更新。
指定一种加入INNERJOIN或LEFTJOIN和联接谓词。JOIN必须在UPDATE之后出现。
将新值分配给要更新的T1(和/或)T2表中的列。
在WHERE子句中指定条件以将行限制为行以进行更新。
如果按照UPDATE语句教程进行操作,我们会注意到还有另一种使用以下语法更新数据交叉表的方法:
UPDATE语句“UPDATEJOIN”与隐式“INNERJOIN”子句的作用相同。我们可以按如下方式重写上述语句:
写在最后
好兄弟可以点赞并