oracleinsert语法MySQL中,关联多张表批量更新-updatejoinonset,关联删除
关联更新
先说⽅法
update table1
join table2 on table1.关联字段=table2.关联字段
set table1.要改变的字段=table2.对应的字段
这个table2经常是⼀张表的聚合后的查询结果
应⽤场景
小程序后端搭建项⽬中经常会有多张表的各种关联,⼀对多,多对多等关系很多,导致查询⼀张表格的东西要关联很多表,速度很慢;
这时候考虑添加⼀个冗余字段,减少查询时表的关联;但是已经有的数据,需要更新⼀下,⼀个个更新肯定要累死,所以这时候就需要批量关联更新举个栗⼦
有两张表:
dept:
CREATE TABLE`dept`(
`dept_id`int(11)NOT NULL AUTO_INCREMENT,
`name`varchar(255)DEFAULT NULL,
`emp_count`int(11)DEFAULT NULL,
PRIMARY KEY(`dept_id`)
)ENGINE=InnoDB AUTO_INCREMENT=4DEFAULT CHARSET=utf8
employee
CREATE TABLE`employee`(
`emp_id`int(11)NOT NULL AUTO_INCREMENT,
`dept_id`int(11)DEFAULT NULL,
`name`varchar(255)DEFAULT NULL,
PRIMARY KEY(`emp_id`)
)ENGINE=InnoDB AUTO_INCREMENT=7DEFAULT CHARSET=utf8
dept中的数据:java虚拟机下载地址
mysql>select*from dept;
+---------+--------+-----------+
| dept_id | name | emp_count |
+---------+--------+-----------+
|1|开发|NULL|
|2|测试|NULL|
|3|销售|NULL|
+---------+--------+-----------+
employee中的数据:
mysql>select*from employee;
+--------+---------+--------+
| emp_id | dept_id | name |
+--------+---------+--------+
|1|1|⼩⽩|
探探号出售网站|2|1|中⽩|
|3|1|⼤⽩|
|4|2|⼩⿊|
|5|2|中⿊|mysql语句多表查询
|6|3|⼤黄|linux七天从入门到精通
+--------+---------+--------+
现在想根据各部门的员⼯数量,如果部门很多,⼀个⼀个更新怕是要累死
批量更新到部门表的emp_count字段上,就需要这么做:
update dept
join(select COUNT(emp_id)as n,dept_id from employee GROUP BY dept_id)as e on e.dept_id = dept.dept_id
set emp_count = e.n;
关联删除
有了关联更新,肯定有时候也想关联删除了
语法:
delete A
from A
inner join B
on A.CID=B.CID
where B.cp = 2 and A.x=xx;
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论