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;

怪哉。

相关推荐
h***59331 小时前
MySQL如何执行.sql 文件:详细教学指南
数据库·mysql
Doro再努力1 小时前
【MySQL数据库09】外键约束与多表查询基础
数据库·mysql
高级程序源2 小时前
springboot社区医疗中心预约挂号平台app-计算机毕业设计源码16750
java·vue.js·spring boot·mysql·spring·maven·mybatis
O***Z6162 小时前
三分钟内快速完成MySQL到达梦数据库的迁移
数据库·mysql
菜鸟小九4 小时前
mysql(锁)
数据库·mysql·oracle
云和数据.ChenGuang5 小时前
运维面试题之oracle和mysql单表最大容量
运维·mysql·oracle
Z***G4796 小时前
【零基础学Mysql】常用函数讲解,提升数据操作效率的利器
数据库·mysql
aml258__6 小时前
MySQL 数据库管理入门:从创建到删除(T1)
数据库·mysql·oracle·初学数据库
beata6 小时前
MySQL 索引你真的用对了吗?
mysql
TDengine (老段)7 小时前
MySQL/PG/TDengine 时间范围 SQL 表达式
sql·mysql·tdengine