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;

怪哉。

相关推荐
天天摸鱼的java工程师7 小时前
高考放榜夜,系统别崩!聊聊查分系统怎么设计,三张表足以?
java·后端·mysql
exe4528 小时前
jdbc查询mysql数据库时,出现id顺序错误的情况
数据库·mysql
Johny_Zhao9 小时前
阿里云数据库Inventory Hint技术分析
linux·mysql·信息安全·云计算·系统运维
loserkk9 小时前
MySQL InnoDB 5.7 索引失效场景解析:原理与案例
mysql
L.S.V.11 小时前
MYSQL(三)--服务器启动参数与配置
服务器·数据库·mysql
有时间要学习11 小时前
MySQL——视图 && 用户管理 && 语言访问
数据库·mysql
艾露z12 小时前
深度解析Mysql中MVCC的工作机制
java·数据库·后端·mysql
全职计算机毕业设计13 小时前
SpringBoot+Mysql实现的停车场收费小程序系统+文档
spring boot·mysql·小程序
AirMan13 小时前
SQL语句中,为什么group by能够提前"预知"select的别名?
mysql
Lx35216 小时前
UNION ALL与UNION的性能差异及选择技巧
sql·mysql·oracle