我在mysql中,想将一些记录的某个字段,改成跟某条记录的该字段的值一样,语句如下:
sql
update org_user set password=(select password from org_user where loginname='admin' limit 1) where userid>1000;
结果就报错了,提示:
Error Code: 1093. You can't specify target table 'org_user' for update in FROM clause。看这意思,不能从表中获取数据来更新自己?
果然,如果从别的表拿数据就可以:
sql
--克隆一个表
create table org_user_tmp as select * from org_user;
--从正式表拿数据更新克隆表,OK
update org_user_tmp set password=(select password from org_user where loginname='admin' limit 1) where userid>1000;
这种语句在别的数据库,比如oracle,是没有问题的。来到mysql就不行了。后来改成这样就可以了:
sql
update org_user as u1
join(select password from org_user where loginname='admin' limit 1) as u2
set u1.PASSWORD=u2.password
where u1.userid>1000;
怪哉。