企业级实践MySQLUPDATEJOIN

背景

有一天,项目经理飞哥心急火燎地来找我,我一看这架势就是有大事发生啊,我虽然表面淡定,但心里慌得一批,心里瞬间浮现一万个可能性……

飞哥说:“小米,生产环境的管理系统出现大问题了,在员工列表页面出现,部门树和右侧的员工数量对不上,明天集团要给各个子公司发福利活动,员工对不上没法统计,你要抓紧时间搞定啊!”

我说:“放心吧,飞哥,我这就去看看,保证完成任务”,其实心里打鼓,硬着头皮上吧。

问题描述

登录生产环境的管理系统,查看报表,点击左侧的开发部,发现部门树上面写的是“开发部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”子句的作用相同。我们可以按如下方式重写上述语句:

写在最后

好兄弟可以点赞并


转载请注明:http://www.aierlanlan.com/rzfs/4858.html