欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-05-18 14:34:06
mysql更新from从句中的字段mysql[err]1093。 update test1 set id = id + 50 where id in (select...

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