【无标题】

对于同一张表修改一批数据,等于另一批数据;或者对于两张表,修改A表一批数据,等于B表的一批数据。

oracle在这方面做到很好,SQL语法也比较简单,但Mysql做的不好,不是不能做,只是比较麻烦。

首先准备两张表:

emp: empno,ename,deptno,sal;(含义为员工编号,姓名,部门编号,工资)

myemp:myid,myname,deptno,sal; (含义为员工编号,姓名,部门编号,工资)

emp.empno 与 myemp.myid关联。

问题:

将emp表中 部门编号为10,主键empno等于myemp表中的myid,所有人员的【姓名,工资】批量同步过去,只能写一个语句。

下面是测试用的脚本:

SQL语句:

create table emp (

empno int(4),

ename varchar(50),

deptno varchar(5),

sal int(8)

)

create table myemp (

myid int(4),

myname varchar(50),

deptno varchar(5),

sal int(8)

)

)

insert into emp(empno,ename,deptno,sal) values (‘1’, ‘张三’, ‘10’, 1000);

insert into emp(empno,ename,deptno,sal) values (‘2’, ‘李四’, ‘10’, 2000);

insert into emp(empno,ename,deptno,sal) values (‘3’, ‘王五’, ‘10’, 3000);

insert into emp(empno,ename,deptno,sal) values (‘4’, ‘赵六’, ‘20’, 4000);

insert into myemp(myid,myname,deptno,sal) values (‘1’, ‘zhangsan’, ‘10’, null);

insert into myemp(myid,myname,deptno,sal) values (‘2’, ‘lisi’, ‘10’, null);

insert into myemp(myid,myname,deptno,sal) values (‘3’, ‘wangwu’, ‘10’, null);

insert into myemp(myid,myname,deptno,sal) values (‘4’, ‘zhaoliu’, ‘20’, 4000);

最初想法是:

update myemp m

set m.sal = (select e.sal from emp e where e.deptno >‘10’ and m.myid = e.empno),

m.myname = (select e.ename from emp e where e.deptno >‘10’ and m.myid = e.empno);

实际上,这样mysql会报错。

Error Code : 1093

You can’t specify target table ‘a’ for update in FROM clause

意思是,要修改的表,就不能在后面子查询语句中使用。

所以正确的方法:

update myemp as a inner join emp as b on a.myid=b.empno

set a.sal= b.sal,a.myname = b.ename

where b.deptno =‘10’ (我觉得应该是>‘10’)

来源https://www.csdn.net/tags/MtzaAg1sMDg0MzEtYmxvZwO0O0OO0O0O.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值