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;

怪哉。

相关推荐
桦01 小时前
【MySQL】视图
数据库·mysql
java_logo3 小时前
Kubernetes Dashboard Docker 容器化部署指南
运维·mysql·docker·云原生·容器·kubernetes·php
Chan164 小时前
热点数据自动缓存方案:基于京东 Hotkey 实践
java·数据库·redis·mysql·spring·java-ee·intellij-idea
y***61315 小时前
在Spring Boot项目中使用MySQL数据库
数据库·spring boot·mysql
佛祖让我来巡山5 小时前
MySQL从零到精通:基础入门与SQL核心操作详解(含MySQL 5/8差异)
mysql·mysql基础·mysql入门
艾斯比的日常5 小时前
MySQL 锁机制深度解析:从原理到实践
数据库·mysql
linuxxx1105 小时前
高考志愿填报辅助系统
redis·后端·python·mysql·ai·django·高考
Code Warrior6 小时前
【MySQL数据库】数据类型
android·数据库·mysql
q***44927 小时前
如何在 Ubuntu 22.04 上安装 MySQL
linux·mysql·ubuntu
r***86988 小时前
mysql的主从配置
android·mysql·adb