mysql: you can't specify target table 问题解决

首先创建一个表:

CREATE TABLE `t1` (
`id` INT(11) NULL DEFAULT NULL,
`name` VARCHAR(20) NULL DEFAULT NULL
)

插入几条数据:

mysql> select * from t1;
+------+------+
| id   | name |
+------+------+
|    1 | chen |
|    2 | li   |
|    3 | huan |
+------+------+
3 rows in set (0.00 sec)

 

需求1:删除最大id的那条记录,于是我们会大约写出如下的语句:

mysql> delete from t1 where id=(select max(id) from t1);
ERROR 1093 (HY000): You can't specify target table 't1' for update in FROM clause
很不幸,它报错了.

可以修改成如下语句:

mysql> delete a from t1 a,(select max(id) maxid from t1) b where a.id=b.maxid;  
Query OK, 1 row affected (0.01 sec)mysql> select * from t1;
+------+------+
| id   | name |
+------+------+
|    1 | chen |
|    2 | li   |
+------+------+
2 rows in set (0.00 sec)

也可以是如下语句:

mysql> delete from t1 where id in ( select a.maxid from (select max(id) maxid from t1) a);  
Query OK, 1 row affected (0.01 sec)mysql> select * from t1;
+------+------+
| id   | name |
+------+------+
|    1 | chen |
+------+------+
1 row in set (0.00 sec)

 

需求2:插入一条记录,并且id值是之前该表最大值加1,于是我们会大约写出如下的语句:

mysql> insert into t1 values( (select max(id)+1 from t1),'you');
ERROR 1093 (HY000): You can't specify target table 't1' for update in FROM clause
依旧报了同样的错误

可以改写如下:

mysql> insert into t1 select (select max(id)+1 maxid from t1 ) , 'you'; 
Query OK, 1 row affected (0.06 sec)
Records: 1  Duplicates: 0  Warnings: 0mysql> select * from t1;
+------+------+
| id   | name |
+------+------+
|    1 | chen |
|    2 | you  |
+------+------+
2 rows in set (0.00 sec)

 

需求3:我们要更新一条语句,id需要变为之前最大值加1,于是我们会大约写出如下的语句: 

mysql> update t1 set id=(select max(id)+1 from t1) where id=1;
ERROR 1093 (HY000): You can't specify target table 't1' for update in FROM clause
错误如初

我们可以改写为如下语句:

mysql> update t1,(select max(id)+1 as maxid from t1 ) a set id=a.maxid where id=1;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0mysql> select * from t1;
+------+------+
| id   | name |
+------+------+
|    3 | chen |
|    2 | you  |
+------+------+
2 rows in set (0.00 sec)

也可以改成如下语句:


mysql> update t1 set id=(select a.maxid from (select max(id)+1 maxid from t1) a) where id=3;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0mysql> select * from t1;
+------+------+
| id   | name |
+------+------+
|    4 | chen |
|    2 | you  |
+------+------+
2 rows in set (0.00 sec)

 

总的思路是:把查询的最大值语句转为subquery或derived。

 

转载于:https://www.cnblogs.com/zejin2008/p/4974166.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/574179.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

s丅7318是啥芯片_透彻解析LED驱动芯片HT1632C指令集与驱动编程

HT1632C是一款很常用的LED(数码管或点阵)驱动芯片,虽然官方已经宣布该芯片明年(2021年)即将寿终正寝(停产),但是相同厂家生产的同系列芯片的控制方式通常是相同的(事实上,大多数LED驱动芯片差别也不大),所以了解HT1632C的控制原理…

服务器显示不明用户远程过,服务器显示不明用户远程过

服务器显示不明用户远程过 内容精选换一换Windows操作系统云服务器蓝屏,如图1所示。使用了来源不明的第三方软件。CPU占用过高导致。因为误操作或者病毒引起的系统文件、注册表损坏。操作系统在蓝屏的情况下,会显示对应的bugcheck code以及可能的导致蓝屏…

【转】Linux ln(link) 命令详解

原文链接 http://blog.chinaunix.net/uid-25445243-id-3206874.html 功能:为某一个文件或目录在另外一个位置建立一个同步的链接,类似Windows下的超级链接。这个命令最常用的参数是-s,具体用法是:sudo ln -s 源文件 目标文件当我们…

微信小程序定义全局变量_微信小程序第二天学习内容分享

微信小程序的生命周期文件的配置在app.js文件中;方法:onLaunch,onShow,onHideapi链接:https://developers.weixin.qq.com/miniprogram/dev/reference/api/App.html#onHideonError,当前也可以自定义,用console测试事件的执行情况&a…

discuz设置用户每天回帖数_discuz回贴通知插件实现-显示用户状态设置

一、完善用户是否开启回贴通知回贴通知插件建立模块时,指定了核心文件post_set.inc.php1、创立好数据库建立独立数据表(不建议直接修改原有的discuz数据库,防止discuz升级后数据库发生变化),来保存是否开启回贴通知。create table 前缀_模块_…

C++中的数组与指针

数组与指针看起来很像 int a[] {1, 2 ,3}; int *p a; 如此,我们可以p[0], p[1], p[2] 看起来,与直接使用数组名没什么两样,但是看这段代码 sizeof(a) sizeof(p) 你就会知道,原来数组里还隐含了大小信息,这是指针所不能做到的 严格的说,数组是一种内置的数据类型,C标准对这种数…

iic总线从机仲裁_I2C总线的仲裁问题

【问】有网友问关于I2C总线的仲裁问题:The I2C-bus specification的第13页有这样的话:In other words, arbitration isn’t allowed between:* A repeated START condition and a data bit* A STOP condition and a data bit* A repeated START conditio…

jvm 加载class文件过程

jvm 加载class文件分为装载-链接-初始化三个过程。 load -------->link verify prepare resolve ---------->initialize (类加载过程) bootstrap class Loader | | extenstion class loader | | system class Loader | | ----------- user-define user-define…

dvt高危患者的护理措施_dvt的预防及护理

DVT的预防措施高危患者预防深静脉血栓的护理措施一、深静脉血栓的预防对象 1.大手术病人:三类、四类手术病人。 2.高危患者:①年龄≥41 岁;②肥胖;③妊娠;④盆腔手术或关节置 换手术;⑤急诊剖腹产手术&…

java环境配置—配置Tomcat8环境

先安装JDK,配置好jdk环境后再配置Tomcat 8配置环境变量:TOMCAT_HOME:D:\Program Files\apache-tomcat-8.0.28  CATALINA_HOME:D:\Program Files\apache-tomcat-8.0.28  CATALINA_BASE:D:\Program Files\apache-tomcat-8.0.28修改CLASSPAT…

加密解密_作业-加密解密程序

# 加密解密程序作业:自己写一个加密程序,能够加密的内容是英文和汉字。同时加密并且解密就是说,一段话中既有中文又有英文,标点符号不用处理。加密规则,获取ascii码数字,中间用|分割# 思路提示:…

详解Objective-C中委托和协议

Objective-C委托和协议本没有任何关系,协议如前所述,就是起到C中纯虚类的作用,对于“委托”则和协议没有关系,只是我们经常利用协议还实现委托的机制,其实不用协议也完全可以实现委托。 AD:【活动】Web和AP…

svn拉取文件合并_SVN分支(branches)合并(merge)到主干(trunk)和拉取分支(tag)

在一个团队协作且不断迭代更新的项目开发中,经常会使用到svn的一些分支主干的方法,这样的好处是使得各个版本之间可独立开发,大多数情况下是branch分支主要用来开发新的功能和版本迭代,主干上面及时快速的修复线上的一些bug和优化…

Unable to load native-hadoop library解决思路

最近试着搭建Hadoop,我使用的操作系统是Centos6.5,Hadoop版本是2.6.0。 在安装过程中总是出现:WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable。 解决…

ios13苹方字体ttf_字体 | iOS1013 SF Compact Rounded 英文 By alex

最近沉迷游戏,差点忘记了这个英文。嗨呀,问就是在玩了,啊不,在做了。这个英文来自推特alexman,原版包含100和85大小,本次分享新增到了100-60,每5%一个大小。gzh分享已经获得alex授权&#xff0c…

Rust 中的继承与代码复用

Rust 中的继承与代码复用 在学习Rust过程中突然想到怎么实现继承,特别是用于代码复用的继承,于是在网上查了查,发现不是那么简单的。 C的继承 首先看看c中是如何做的。 例如要做一个场景结点的Node类和一个Sprite类继承它。 定义一个node基类…

怎么将自己的头像p到特定的背景图_【后期修图】photoshop手把手教你制作属于自己的酷炫的微信头像...

原标题:【后期修图】photoshop手把手教你制作属于自己的酷炫的微信头像效果图先放上1.新建一个白色的背景,这里是1080*720的。然后在图层面板下面单击创建新的调整图层/渐变,设 置 好渐变参数:黑白渐变,径向&#xff0…

10双屏鼠标过不去_灵耀X2 Duo双屏笔记本是怎样“炼”成的?对话华硕笔记本设计团队...

2020年的CES上,华硕推出了一款灵耀X2 Duo笔记本,灵耀X2 Duo采用了和灵耀X2 Pro相同的屏幕技术,C面同样采用了一块ScreenPad Plus副屏,机身也更轻更薄。如今灵耀X2 Duo的处理器升级至英特尔第十代酷睿,正在参与“618”大…

powershell加win的dns服务器,解决网站负载均衡问题

用我发明的powershell填坑法,加windows的dns服务器。从调整dns服务器解析ip时间段的角度,解决网站负载均衡问题。 ------------------------win2012r2中,用powershell管理dns服务器的,命令列表-------------------------------- 共…

csv python 只写一次_在Python CSV Writer循环中写入一次头

下面是一个scraper,它遍历两个网站,获取团队的花名册信息,将信息放入一个数组中,然后将数组导出到CSV文件中。一切都很好,但唯一的问题是每次scraper移动到第二个网站时,csv文件中的writerow头会重复出现。…