全网详细解决1093 - You can‘t specify target table ‘xxx‘ for update in FROM clause的错误

news2024/9/22 3:33:51

文章目录

  • 1. 复现错误
  • 2. 分析错误
  • 3. 解决错误

1. 复现错误


今天在工作时,接到一个新需求,就是将app_page_button表中的label_code字段修改为edit,条件如下:

  1. 只更新值为nulllabel_code

  2. 且以/edit/${id}'结尾的option_value

首先使用如下SQL查询满足上述条件的记录,如下代码所示:

SELECT 
	id, label, label_code, option_value 
FROM 
	app_page_button 
WHERE 
	label_code IS NULL 
	AND option_value LIKE '%/edit/${id}';
	
+-----+-------+------------+-----------------------+
| id  | label | label_code | option_value          |
+-----+-------+------------+-----------------------+
| 706 | 编辑  | NULL       | put:common/edit/${id} |
| 710 | 编辑  | NULL       | put:common/edit/${id} |
| 714 | 编辑  | NULL       | put:common/edit/${id} |
+-----+-------+------------+-----------------------+

得到满足上述条件的记录有3条,使用如下SQL语句修改:

UPDATE app_page_button 
SET label_code = 'edit' 
WHERE
	id IN ( 
		SELECT 
			id 
		FROM  
			app_page_button 
		WHERE 
			label_code IS NULL AND option_value LIKE '%/edit/${id}' 
	);

ERROR 1093 (HY000): You can't specify target table 'app_page_button' for update in FROM clause

在这里插入图片描述

You can't specify target table 'app_page_button' for update in FROM clause的错误。

2. 分析错误


最近申请的文心一言刚审核通过,可以借助它来分析我的错误,如下图所示:

在这里插入图片描述

文心一言的回答,和我的本意不一致。我本想在查询结果中,更新label_code值。

因而,我需要自己分析,来解决这个错误。

You can't specify target table 'app_page_button' for update in FROM clause的含义:不能在同一表(app_page_button)中查询的数据,作为同一表(app_page_button)的更新数据。

3. 解决错误


既然不能先select出同一表中的某些值,再update这个表(在同一语句中),那就采用将查询结果存储到临时表(tmp)表中,id从这个临时表(tmp)中获取,如下代码所示:

UPDATE app_page_button
SET label_code = 'edit'
WHERE
	id IN ( 
		SELECT id 
		FROM ( 
			SELECT 
				id 
			FROM 
				app_page_button 
			WHERE 
				label_code IS NULL AND option_value LIKE '%/edit/${id}' 
		) as tmp 
	);

Query OK, 3 rows affected (0.01 sec)
Rows matched: 3  Changed: 3  Warnings: 0

根据Query OK, 3 rows affected (0.01 sec)这句话可知,已更新成功,从如下SQL可以看到:

select 
	id, label, label_code, option_value 
from 
	app_page_button 
where 
	id in (706,710,714);

+-----+-------+------------+-----------------------+
| id  | label | label_code | option_value          |
+-----+-------+------------+-----------------------+
| 706 | 编辑  | edit       | put:common/edit/${id} |
| 710 | 编辑  | edit       | put:common/edit/${id} |
| 714 | 编辑  | edit       | put:common/edit/${id} |
+-----+-------+------------+-----------------------+
3 rows in set (0.00 sec)

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

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

相关文章

基于微信小程序+爬虫制作一个表情包小程序

跟朋友聊天斗图失败气急败坏的我选择直接制作一个爬虫表情包小程序,从源头解决问题,从此再也不用担心在斗图中落入下风 精彩专栏持续更新↓↓↓ 微信小程序实战开发专栏 一、API1.1 项目创建1.2 图片爬虫帮助类1.3 测试窗体1.4 接口封装二、小程序2.1 项目创建2.2 页面设计2.…

css 实现太极效果

目录 一、简述二、太极效果制作 一、简述 本次主要介绍::after,::before,box-shadow这三个属性。 ::after,::before这两个是伪类选择器,box-shaow是用来设置元素的阴影效果 before:向选定的元素前插入内容 after:向选定的元素后插…

关于在线CAD编辑的解决方案思考

基于ODA的VisualizeJs库的能力 ODA官网的OpenCloud提供了在线浏览CAD图纸的能力(ODA自身也不支持直接在线解析Dwg,而是通过ODA提供的WebTools里面的FileConverter的能力将dwg图纸转换为VSF格式(CAD的一种二三维格式,在AutoCAD中也有一种类似的ForgeView…

chatGPT衣食住行10种场景系列教程(01)使用chatGPT设计发型、P图变漂亮~真帅哈哈哈~

导读 时隔5个多月,chatGPT可谓是一日千里,越演越火,携带着AIGC行业一起飞了起来,那么在短短5个月当中有那些值得我们关注的事件?有那些好玩的场景?以及有那些chatGPT好用的工具?本文都将一一告…

neo4j数据库的安装及使用

一、安装neo4j 安装neo4j数据库,需要先安装jdk,jdk版本不能太低,不然运行neo4j的时候会报错。 我下载的是jdk11,以前已经下载过了,这里不再进行演示,下载jdk11的教程应该挺多的,自己搜一个吧 …

nodejs+vue美容院预约管理系统springboot+java+python

本课题将根据用户类型大致划分为管理员模块和美容师模块和用户模块,开发语言拟采用目前比较 语言 node.js 框架:Express 前端:Vue.js 数据库:mysql 数据库工具:Navicat 开发软件:VScode ,界面采用vue前端框…

jsp+servlet教材预定系统mysql

目 录 一、引言 6 (一) 课题目的及意义 6 1、课题目的 6 2、课题研究意义 6 (二) 国内外研究现状 6 1、国外研究现状 6 2、国内研究现状 7 (三) 研究方法及设计思路 7 1、研究方法 7 2、设计思路 8 二、需求分析与可行性分析 9 (一) 需求分析…

源码:LeakCanary

一、介绍 自动检测内存泄漏的检查工具 二、使用 debugImplementation com.squareup.leakcanary:leakcanary-android:2.5debugImplementation只在debug模式的编译和最终的debug apk打包时有效 Memory Profiler 使用步骤 生成的内存泄漏快照 会放在sdcard/Download/leakcanar…

Node【Global全局对象】之【URL】

文章目录 🌟前言🌟URL🌟URL组成部分🌟URL 类🌟url.href🌟url.pathname🌟url.port🌟url.protocol🌟url.search🌟url.searchParams🌟url.hash&#…

DAY829

学习目标:成就上瘾,学到欲罢不能 4月(复习完高数18讲内容,背诵21篇短文,熟词僻义300词基础词) 学习内容: 暴力英语:背单词150个,背《死亡诗社》经典语段,抄写…

【web前端开发】CSS定位

文章目录 1.定位介绍2.定位的方式2.1 相对定位2.2 绝对定位2.2.1 子绝父相 2.3 固定定位 3. 元素的层级关系4. 总结 1.定位介绍 定位有两个作用: 1.可以解决盒子和盒子之间的层叠问题 (定位之后元素层级最高,可以层叠在其它盒子上面) 2.可以让盒子始终固定在屏幕中的某个位置 …

shell呈现数据

shell脚本编程系列 理解输入和输出 目前为止了解了两种显示脚本输出的方法:在显示器屏幕上显示输出,将输出重定向到文件中,这两种方法将数据输出全部显示出来,要么什么都不显示,但有时一部分数据显示屏幕上&#xff0…

Android---启动页+闪屏页

目录 启动页 闪屏页 启动页 app 在进入首页面的过程中,都会线加载一张图片然后再进入闪屏页。这样,可以给用户很好的体验。 作用:避免加载白屏页面,进行业务的预处理(网络检测、数据预加载...) 界面组成…

基于Pyqt5快速构建应用程序详细教程

一、介绍 图形用户界面,更广为人知的名称是 GUI,是当今大多数个人计算机的一个特征。 它为不同计算技能水平的用户提供了直观的体验。 尽管 GUI 应用程序可能会使用更多资源,但由于其点击式特性,它们通常对用户友好。 PyQt 是可用…

最小生成树|二分图

最小生成树跟边的正负没有任何关系。 最小生成树 朴素Prime 该算法和Dijkstr算法很像。 先把所有距离初始化为正无穷 进行n次迭代 找到不在集合(集合指当前的生成树)当中的点,s数组表示当前已经在连通块(生成树)中的所…

vue-simple-uploader在VUE3中分片上传大文件

vue-simple-uploader是一个优秀的大文件分片上传组件,在vue2里面工作一切正常,但是在vue3里面却发现了一些问题: (1)在element-plus的el-dialog里面渲染失败; (2)上传进度条不能正…

由浅入深详解四种分布式锁

在多线程环境下,为了保证数据的线程安全,锁保证同一时刻,只有一个可以访问和更新共享数据。在单机系统我们可以使用synchronized锁或者Lock锁保证线程安全。synchronized锁是Java提供的一种内置锁,在单个JVM进程中提供线程之间的锁…

信息系统项目管理师,第四版应该如何应对

一、 改版情况。 2023年3月,新版教材起售。 2023年4月4日,官网宣布本次考试第三版第四版兼顾使用。 以历年的考试时间来看,一般这次考试是在 5月27日、28日附近。 接下来只有一个月左右的时间了。给大家聊聊面对现在这个情况如何备考。 …

考研计算机组成原理总结(7)

一.虚拟存储器 1.基本知识 主存和辅存共同构成了虚拟存储器,二者在硬件和系统软件的共同管理下工作。对于应用程序员而言,虚拟存储器是透明的。虚拟存储器具有主存的速度和辅存的容量。 2.基本概念 虚拟存储器将主存或辅存的地址空间统一编址&#x…

如何提高图片清晰度?三种方法来帮你!

如何提高图片清晰度?图片在上传到网络后会被压缩,导致图片变得模糊。今天,我将分享三种方法,帮助您提高图片的清晰度。 方法一:使用记灵在线工具 工具地址:记灵在线工具 - 更专注于发现工具的实用性 该工…