mysql 从同一个表获取数据update自身报错一例

我在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;

怪哉。

相关推荐
流烟默32 分钟前
MySQL索引调优之索引顺序必须和字段顺序一致吗?
mysql·索引调优
我是Superman丶1 小时前
【优化】Mysql指定索引查询或忽略某个索引
数据库·mysql
LL_break2 小时前
Mysql数据库
java·数据库·mysql
星光一影6 小时前
【OA办公系统】神点企业OA办公助手/全开源
mysql·nginx·开源·php·源代码管理
华仔啊6 小时前
千万级大表如何新增字段?别再直接 ALTER 了
后端·mysql
W.Buffer8 小时前
通用:MySQL主库BinaryLog样例解析(ROW格式)
android·mysql·adb
W.Buffer8 小时前
通用:MySQL-InnoDB事务及ACID特性
数据库·mysql
潘潘潘潘潘潘潘潘潘潘潘潘10 小时前
【MySQL】库与表的基础操作
数据库·mysql·oracle