有点SQL基础的朋友肯定听过“跨表查询”,那啥是跨表更新啊?
<强>背景强>
项目新导入了一批人员数据,这些人的有的部门名称发生了变化,有的联系方式发生了变化,暂且称该表为
<代码> t_dept_members> 代码,系统中有另外一张表<代码> t_user_info> 代码记录了人员信息。要求将<代码> t_dept_members> 代码中有变化的信息更新到<代码> t_user 代码>表中,这个需求就是“跨表更新”啦
<强>憨B SQL直接被秒杀强>
不带脑子出门的就写出了下面的SQL
看到身后DBA小段总在修仙,想着让他帮润色一下& # 128540;,于是发给了他,然后甩手回来就是这个样子:
看到这个SQL语句我都惊呆了,还能这样写,在无情的嘲笑下,一声KO我直接倒下。死也得死的明白,咱得查查这是咋回事啊
<强> Mysql更新加入强>
我们经常使用<代码>与代码>查询表中具有(在<代码>内连接> 代码情况下)或可能没有(在<代码>左加入代码>情况下)另一个表中匹配行的表中的行。
在MySQL中,同样我们也可以在更新语句中使用加入子句执行跨表更新,语法就是这样:
更新T1, T2, (内部连接|左连接)T1> 更新T1, T2 组T1。c2=T2.c2, T2。c3=expr 在T1。c1=T2。c1和条件 >之前上面的语法其实隐式使用了内连接关键字,完全等同于下面的样子:
更新T1, T2 内连接T2 alt=" MySQL跨表查询与跨表更新">建表语句如下:
创建表的员工 ( employee_id bigint auto_increment评论的员工ID,主键的, employee_name varchar(50)零评论的员工名称”, 性能int(4)零评论“绩效分数1,2,3,4,5 ', 工资浮空评论的员工薪水”, 约束employees_pk 主键(employee_id) ) 评论的员工表'; >之前第二张表“优点——绩效字典表”
建表语句如下:
创建表的优点 ( 性能int(4)空, 百分比浮空 ) 评论“绩效字典表'; >之前先生成一些模拟数据
——绩效字典初始化数据 插入的优点(性能、百分比) 值(1,0), 0.01 (2), (0.03), 0.05 (4), (0.08); ——员工表初始化数据 插入员工(employee_name、性能、工资) 值(“拱哥”,1000), (“小段总”,20000), (“大”人,4,18000), (“司令’,5,28000), (“老六”,2,10000), (“罗蒙”,20000); >之前
调薪规则:原有薪资+(原有薪资*当前绩效对应的调薪百分比)
引用>按照调薪规则写更新语句:
更新员工 内连接 优点alt=" MySQL跨表查询与跨表更新">拱哥绩效不好,没给涨工资…
三横一竖一咕嘎,四个小猪& # 128055;来吃咋,咕嘎咕嘎又来俩引用>临近年底,公司又来了两位新同事,但是公司年度绩效已经评完,所以新员工绩效为空
插入员工(employee_name、性能、工资) 值(“馮大’,NULL, 8000), (“馮二”,零,5000); >之前新员工工作干的不错,也要<代码> 代码> 1.5%涨点工资的。如果我们还是用<代码>更新内连接> 代码,按照上面的更新语句是不可能完成的,因为条件等式不成立,这是我们就要用到<代码>更新了加入代码>了
更新员工 左连接 优点alt=" MySQL跨表查询与跨表更新">到这里,新员工的涨薪工作也做完,拱哥由于知识点了解不透彻,灰溜溜的回家过年
MySQL跨表查询与跨表更新