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;

怪哉。

相关推荐
百结2142 小时前
Mysql数据库操作
数据库·mysql·oracle
ego.iblacat3 小时前
MySQL 服务基础
数据库·mysql
攒了一袋星辰5 小时前
高并发强一致性顺序号生成系统 -- SequenceGenerator
java·数据库·mysql
顶点多余6 小时前
使用C/C++语言链接Mysql详解
数据库·c++·mysql
Seven978 小时前
MySQL语句执行深度剖析:从连接到执行的全过程
mysql
总要冲动一次9 小时前
离线安装 percona-xtrabackup-24
linux·数据库·mysql·centos
buhuimaren_9 小时前
MySQL数据库初体验
数据库·mysql
J超会运10 小时前
MySQL核心SQL语句速查宝典
数据库·mysql
殷紫川10 小时前
吃透分库分表:分片策略、跨库事务与平滑扩容全解
mysql·架构
殷紫川10 小时前
SQL 性能优化全解:从执行计划到底层逻辑,根治 99% 的慢 SQL 与规范落地
数据库·mysql