锋盈数科-知识库 Logo
首页
软件开发
计算机基础
Hello Halo
新手必读
关于本知识库
登录 →
锋盈数科-知识库 Logo
首页 软件开发 计算机基础 Hello Halo 新手必读 关于本知识库
登录
  1. 首页
  2. 软件开发
  3. 数据库
  4. MySQL 出现 You can‘t specify target table for update in FROM clause 错误的解决方法

MySQL 出现 You can‘t specify target table for update in FROM clause 错误的解决方法

0
  • 数据库
  • 发布于 2024-08-09
  • 0 次阅读
黄健
黄健

本文由 简悦 SimpRead 转码, 原文地址 blog.csdn.net

【MySQL-Bug】MySQL 出现 You can't specify target table for update in FROM clause 错误的解决方法

  • 分析原因
  • 解决方法

分析原因

在 MySQL 中,可能会遇到 You can't specify target table '表名' for update in FROM clause 这样的错误

它的意思是说,不能在同一语句中,先 select 出同一表中的某些值,再 update 这个表,即不能依据某字段值做判断再来更新某字段的值。

这个问题在 MySQL 官网中有提到解决方案:MySQL-UPDATE- 拉到文档下面

例如下面这张 t_message 表

+----+-----+-----------+---------------------+
| id | uid | content   | addtime             |
+----+-----+-----------+---------------------+
|  1 |   1 | content1  | 2022-04-26 00:00:01 |
|  2 |   2 | content2  | 2022-04-26 00:00:02 |
|  3 |   3 | content3  | 2022-04-26 00:00:03 |
|  4 |   1 | content4  | 2022-04-26 00:00:04 |
|  5 |   3 | content5  | 2022-04-26 00:00:05 |
|  6 |   2 | content6  | 2022-04-26 00:00:06 |
|  7 |   2 | content7  | 2022-04-26 00:00:07 |
|  8 |   4 | content8  | 2022-04-26 00:00:08 |
|  9 |   4 | content9  | 2022-04-26 00:00:09 |
| 10 |   1 | content10 | 2022-04-26 00:00:10 |
+----+-----+-----------+---------------------+

我想将每个用户第一条消息的内容更新为 Hello World

UPDATE t_message 
SET content = 'Hello World' 
WHERE id IN ( 
			 SELECT min(id) FROM t_message GROUP BY uid 
			);

会出现下面错误:

ERROR 1093: You can't specify target table 't_message' for update in FROM clause

因为在同一个 sql 语句中,先 select 出 t_message 表中每个用户消息的最小 id 值,然后再更新 t_message 表,因此会出现 ERROR 1093 : You can’t specify target table ‘message’ for update in FROM clause 这个错误。

解决方法

解决方法:select 的结果再通过一个中间表 select 多一次,就可以避免这个错误。

UPDATE message 
SET content = 'Hello World' 
WHERE id IN ( 
			SELECT min_id FROM ( 
				  SELECT min(id) AS min_id FROM t_message GROUP BY uid 
								) AS a 
			);
标签: #数据库 67
相关文章

深入理解MySQL InnoDB中的B+索引机制 2024-09-30 14:41

目录 一、InnoDB中的B+ 树索引介绍 二、聚簇索引 (一)使用记录主键值的大小进行排序

mysql中B+树的数据存储 2024-09-29 16:36

B+树索引基础分析 B+树 的定义 B+树是一种自平衡的树形数据结构,常用于数据库和操作系统的索引结构。它具有以下特点: 所有数据都存储在叶子节点,非叶子节点仅存储键值和子节点的指针。 叶子节点之间通过指针相互连接,形成一个有序链表,便于范围查询。 每个节点可以拥有多个键值,键值之间是有序的。 B+

MySQl索引事务(B树) 2024-09-29 16:36

目标: 索引 事务 1.索引 1.1概念 索引是一种特殊的文件,包含着对数据表里所有记录的引用指针。可以对表中的一列或多列创建索引,并指定索引的类型,各类索引有各自的数据结构实现。 1.2作用 数据库中的表、数据、索引之间的关系,类似于书架上的图书、书籍内容和书籍目录的关系。 索引所起的作用类似书籍

MySQL数据库的备份与恢复 2024-09-26 17:57

MySQL数据库的备份与恢复 在现代信息时代,数据已成为企业和个人的重要资产,数据的安全性和可恢复性直接影响到业务的连续性和稳定性。MySQL作为广泛使用的关系型数据库管理系统,其数据的备份与恢复显得尤为重要。本文将详细探讨MySQL数据库的备份与恢复策略,包括备份的重要性、备份类型、常用备份方法及

MySQL中创建数据库和表 2024-09-26 17:57

在MySQL中创建数据库和表是数据库管理的基础步骤,它们构成了数据存储和操作的基础结构。下面,我将详细介绍如何在MySQL中创建数据库和表,包括创建数据库的基本语法、设计表的考虑因素、表的创建过程、数据类型和约束的使用等,力求内容详尽且不少于2000字。 一、创建数据库 在MySQL中,数据库是一个

MySQL数据库主从搭建(详细图文) 2024-09-28 15:11

MySQL数据库主从搭建(详细图文) 前言 主从原理: MySQL之间数据复制的基础是二进制日志文件(binary log file)。一台MySQL数据库一旦启用二进制日志后,其作为master,它的数据库中所有操作都会以"事件"的方式记录在二进制日志中,其他数据库作为slave通过一个I/O线程

目录

IT 外包服务商

  • 意见投递
  • zyf6619

软件开发应用

主菜单

  • 首页
  • 软件开发
  • 计算机基础
  • Hello Halo
  • 新手必读
  • 关于本知识库
Copyright © 2024 your company All Rights Reserved. Powered by Halo.