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(id) as id from message group by content)as a

2、用别名,查出数据范围,即 select a.id from (select min(id) as id from message group by content)as a

修改后的完整SQL为

delete from message where id not in  (select a.id from (select min(id) as id from message group by content) as a);

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

原文地址:https://www.cnblogs.com/testeyes/p/11419188.html

时间: 2024-10-18 15:26:49

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

mysql 更新sql报错:You can't specify target table 'wms_cabinet_form' for update in FROM clause

数据库里面有两个字段的位置不对,要把他们对调换下.因为没有数据库写的权限,需要用sql语句来实现.原来以为简单的 update table a set a.字段a=(select b字段 from table  where id=?) ,set a.字段b=(select a字段 from table where id=?) where id=? ,结果报了 这个问题 You can't specify target table 'wms_cabinet_form' for update in

关于mysql 5.7版本“报[Err] 1093 - You can't specify target table 'XXX' for update in FROM clause”错误的bug

不同于oracle和sqlserver,mysql并不支持在更新某个表的数据时又查询了它,而查询的数据又做了更新的条件,因此我们需要使用如下的语句绕过: UPDATE teaching_department SET code_year = 2017, notice_code = (SELECT a.code + 1 FROM (SELECT MAX(notice_code) code FROM teaching_department WHERE department_id = 6284 and

mysql - sql报错You can't specify target table 'table_name' for update in FROM clause

今天写了个更新数据库表的语句,本意是根据某个条件,筛选出该表某些数据之后,对这些数据进行删除操作,如下 delete from t_person where id in (select id from t_person where name = "hello"); 然而却报错: You can't specify target table 't_person' for update in FROM clause 以下这篇博客( https://blog.csdn.net/qq_2967

MySQL - 1093异常 - You can't specify target table 't' for update in FROM clause

有一个表示地区的表,表结构与数据大概如下表. ID NAME PARENT_ID 1 中国 2 广东省 1 3 广州市 2 4 荔湾区 3 5 越秀区 3 6 番禺区 3 7 小谷围街道 6 现为了查询方便,需要加一列PARENT_NAME,用以表示上级地区的名称(虽然不符合第三范式,传递依赖,但有时为了业务上的可行性.便利性,可以按实际情况考虑) ID NAME PARENT_ID PARENT_NAME 1 中国 2 广东省 1 3 广州市 2 4 荔湾区 3 5 越秀区 3 6 番禺区 3

(原)mysql错误1093 You can't specify target table 'wms_cabinet_form' for update in FROM clause

这个错误的意思是不能先select出同一表中的某些值,再update这个表(在同一语句中),解决方法不直接查询同一个,假设要更新的表为A,则先将A的的数据放到表B,再从表B中查询则得到更新和查询表A的效果 例: 成绩表: 把“SC”表中“姚明”老师教的课的成绩都更改为此课程的平均成绩 update sc set score=(select avg(a.score) FROM (select score,C from sc) a where a.C in (select C from course

mysql 一个较特殊的问题:You can't specify target table 'sys_user' for update in FROM clause

SELECT uin,account,password,create_user_uin_tree FROM sys_user 结果: 表中的create_user_uin_tree标识该条记录由谁创建. 创建新用户时,根据当前登录用户的uin及新创建的用户uin,有如下SQL: select concat(ifNULL(create_user_uin_tree,concat('_',2,'_')),'|_','97',"_") from sys_user where uin=2 结果:

Mysql -- You can't specify target table 'address' for update in FROM clause

做地址管理时,需要先根据要设为默认的地址的用户将用户的其他地址都设置为非默认 需要select出用户id然后update 原语句 update address set isdeafult = 0 where user_id = (select user_id from address where id = ?) 报错 -- You can't specify target table 'address' for update in FROM clause 大意是不能先select出同一表中的某些

mysql:You can't specify target table 'bpm_tksign_data' for update in FROM clause

UPDATE bpm_tksign_data SET iscompleted = 1 WHERE actinstid = '10000002433415' AND nodeid = 'SignTask1' AND iscompleted = 0 AND batch = ( SELECT max(a.batch) m FROM bpm_tksign_data a WHERE a.actinstid = '10000002433415' AND a.nodeid = 'SignTask1' ); 这

MySQL: [Err] 1093 - You can't specify target table 'bk' for update in FROM clause

错误的意思说,不能先select出同一表中的某些值,再update这个表(在同一语句中). 例如下面这个sql: delete from tbl where id in (        select max(id) from tbl a where EXISTS        (            select 1 from tbl b where a.tac=b.tac group by tac HAVING count(1)>1        )        group by tac