You can't specify target table '表名' for update in FROM clause”解决方法

You can‘t specify target table ‘表名‘ for update in FROM clause

翻译为:不能先select出同一表中的某些值,再update这个表。

错误语句:

update w_workitems ww set ww.endTime = ww.createTime where ww.gid in(
select * from a_travel a ,w_workitems b where a.instance_id = b.instanceId and a.apply_status = ‘2‘
and a.id>‘202001‘ and b.endTime is null ORDER BY b.createTime desc;

修改后:

UPDATE w_workitems ww
SET ww.endTime = ww.createTime
WHERE
ww.gid IN (
SELECT
aa.gid
FROM
(
SELECT
b.*
FROM
a_travel a,
w_workitems b
WHERE
a.instance_id = b.instanceId
AND a.apply_status = ‘2‘
AND a.id > ‘202001‘
AND b.endTime IS NULL
ORDER BY
b.createTime DESC
) aa
);

You can't specify target table '表名' for update in FROM clause”解决方法

原文地址:https://www.cnblogs.com/zxHu/p/12636128.html

时间: 2024-10-07 04:39:20

You can't specify target table '表名' for update in FROM clause”解决方法的相关文章

MySQL问题:You can't specify target table '表名' for update in FROM clause

在MySQL中,写SQL语句的时候 ,可能会遇到You can't specify target table '表名' for update in FROM clause这样的错误,它的意思是说,不能先select出同一表中的某些值,再update这个表(在同一语句中). 1.问题是如何出现的? 数据准备 CREATE TABLE T_Person( pId INT PRIMARY KEY AUTO_INCREMENT, pName VARCHAR(20) ); INSERT INTO T_Pe

MySQL 中 You can't specify target table '表名' for update in FROM clause错误解决办法

背景 在MySQL中,写SQL语句的时候 ,可能会遇到 You can't specify target table '表名' for update in FROM clause 这样的错误 错误含义 它的意思是说,不能先 select 出同一表中的某些值,再 update 这个表(在同一语句中),即不能依据某字段值做判断再来更新某字段的值. 解决问题 将select出的结果再通过中间表select一遍,这样就可以解决错误了 MySQL 中 You can't specify target ta

CREATE TABLE 表名 AS SELECT 语句

1.新表不存在复制表结构即数据到新表 ? 1 2 create table new_table select * from old_talbe; 这种方法会将old_table中所有的内容都拷贝过来,用这种方法需要注意,new_table中没有了old_table中的primary key,Extra,auto_increment等属性,需要自己手动加,具体参看后面的修改表即字段属性.只复制表结构到新表 ? 1 2 3 4 5 6 # 第一种方法,和上面类似,只是数据记录为空,即给一个false

MySql清空表的方法介绍 : truncate table 表名

清空某个mysql表中所有内容 delete from 表名; truncate table 表名; 不带where参数的delete语句可以删除mysql表中所有内容,使用truncate table也可以清空mysql表中所有内容.效率上truncate比delete快,但truncate删除后不记录mysql日志,不可以恢复数据. delete的效果有点像将mysql表中所有记录一条一条删除到删完,而truncate相当于保留mysql表的结构,重新创建了这个表,所有的状态都相当于新表.

django.db.utils.OperationalError: (1050, "Table '表名' already exists)解决方法

django.db.utils.OperationalError: (1050, "Table '表名' already exists)解决方法 找到解决方案,执行: [python] view plain copy python manage.py migrate myapp --fake 数据库表结构同步成功. django.db.utils.OperationalError: (1050, "Table '表名' already exists)解决方法 原文地址:https://

Mysql更新数据时,报 “You can't specify target table 'message ' for update in FROM clause” 解决办法

报错的SQL为: delete from message where id not in  (select min(id) as id from message group by content); 报错信息的中文意思为:不能在FROM子句中更新  message表数据,原因是 "不能在从本表中查出数据范围后,然后直接更新本表", 解决方法思路是,让数据库认为,你查出的数据范围,是不从本表中查出来的,实现步骤如下: 1.用as,给查出的数据表,设置别名为a,即 (select min(

MySQL表类型和存储引擎版本不一致解决方法

使用的是老版本的mysql客户端Navicate 8 ,mysql 服务端用的是mysql5.6的版本,在修改版本引擎的时候出现版本不对; mysql error ‘TYPE=MyISAM’ 解决办法: Replace TYPE=MyISAM with ENGINE=MyISAM The problem was “TYPE=MyISAM” which should be “ENGINE=MyISAM” as per MySQL version updates – a simple search

常见表单重复提交问题整理及解决方法

常见表单重复提交问题整理及解决方法 一.常见的重复提交问题 a>点击提交按钮两次. b>点击刷新按钮. c>使用浏览器后退按钮重复之前的操作,导致重复提交表单. d>使用浏览器历史记录重复提交表单. e>浏览器重复的HTTP请求. 二.防止表单重复提交的方法 a>禁掉提交按钮.表单提交后disabled现在的按钮或者取消该按钮的点击事件或者默认事件.这种方法防止心急的用户多次点击按钮.但有个问题,如果在客户端把Javascript给禁止掉,这种方法就无效了,当然现代的w

windows下安装Mysql8,表名无法设置成大小写敏感的解决

windows下安装Mysql8.0.13,由于widows默认是大小写不敏感,安装成功之后,创建的数据库表表名都是小写的.这样对于用代码生成工具生成代码的同学来说就不方便,而且全都小写,看上去也是一团懵逼.但是,如何修改配置,让表名区分大小写呢.配置项很简单,默认lower_case_table_names=1,设置成2就可以.关于lower_case_table_names的说明参考官网:https://bugs.mysql.com/bug.php?id=90814修改my.ini文件,配置