当前位置: 移动技术网 > IT编程>数据库>Mysql > MySQL更新FROM从句中的字段mysql[Err]1093

MySQL更新FROM从句中的字段mysql[Err]1093

2019年04月19日  | 移动技术网IT编程  | 我要评论

mysql更新from从句中的字段mysql[err]1093。

update test1 
set id = id + 50 
where id in (select t1.id from test1 t1, test2 t2 where t1.id = t2.id)

上面sql语句是想更新,在test2中存在test1的数据,更新test1表,但是由于要更新的字段 id 跟需要查找的字段重叠,导致会出现如下错误:

[err] 1093 - you can't specify target table 'testmyisam' for update in from clause

错误原因是:mysql不能更新出现在 from 从句中的字段;
可是这种语句在oracle,甚至pgsql都是可以执行的,不能执行的原因我猜是由于mysql历史没有事务的特性决定的(原因是瞎猜的):由于mysql最早是没有事务的,所以更新应该是执行一条提交一条的,但是由于要更新的字段出现在了from后面,成为了查询条件,那么更新后的语句就有可能再次被查询出来,导致更新的结果跟预期的不符合,所以直接禁止这种操作。

变通方法:
通过 join 技巧进行更新

update test t1 join (select t1.id from test1 t2, test t1 where t1.id = t2.id) t2 on t1.id = t2.id 
set t1.id = t1.id + 50 

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网