2 youye youye_ 于 2016.03.17 12:47 提问

mysql 同一个表不能同时进行update 和select 操作 已看过网上写法但还是有错

mysql 版本 5.7.9

原来的代码进行的操作
UPDATE message_list SET Status = 1 WHERE RecID IN (SELECT RecID FROM message_list );

根据网上 添加一个中间表后 还是不能进行update 操作
PDATE message_list SET Status = 1 WHERE RecID IN (SELECT a.RecID FROM (SELECT c.* FROM message_list c) a);

下面是错误信息

mysql> UPDATE message_list SET Status = 1 WHERE RecID IN (SELECT a.RecID FROM (SELECT c.* FROM message_list c) a);
1093 - You can't specify target table 'message_list' for update in FROM clause
mysql>

3个回答

qq423399099
qq423399099   Ds   Rxr 2016.03.17 13:07

不知道LZ是不是要以下的效果:
图片说明

以下两种方式都是可以的

 update message_list set Status = 1 where RecID in (select * from (select RecID from message_list)v);
  update message_list set Status = 2 where RecID in (select RecId from (select * from message_list)v);
qq423399099
qq423399099 回复youye_: 5.6.24
2 年多之前 回复
youye_
youye_ mysql 版本 5.7.9 不能 你的mysql版本是多少
2 年多之前 回复
u011489205
u011489205   2016.03.17 13:12

使用下面的sql执行:

UPDATE message_list SET Status = 1 WHERE RecID IN (SELECT t.* from (select  RecID from message_list ) t);
youye_
youye_   2016.03.17 13:59

图片说明
版本问题 我不知道5.7.9 做了什么改动 因为看不懂英语 希望大家能一起找出原因 怎么修改这语句

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
mysql 为什么不能在同一个表上查询和更新?
mysql 为什么不能再同一个表上查询和更新? 案例 情况1: update table set x = (select y from table where id =1) error 1093: you cant specify target table test for update in from clause 情况2: 通常采用的解决方案 update table
无法在同一张表上查询和更新的问题解决方法
问题引入要在一张已存在并且有数据的表上建一个唯一索引,由于建索引的这列有很多重复的数据,导致无法建unique索引!要一条条数据手工删除吗?不!我是工程师,我要用技术的手段删除重复数据。写了一个删除重复数据的sql,如下: delete from entity_tag where id not in (select max(id) fr
mysql 对同一个表select 和update
mysql不会让你在对一个表进行update的同时运行select 变通的方式是衍生表,生成一张临时表。这样就可以既update又select update tb_trade_1 inner join (select  tid ,count(*) as cnt  from tb_order_1 group by tid) as der using(tid) set commission_fee
MySQL SELECT同时UPDATE同一张表
MySQL不允许SELECT FROM后面指向用作UPDATE的表,有时候让人纠结。当然,有比创建无休止的临时表更好的办法。本文解释如何UPDATE一张表,同时在查询子句中使用SELECT. 问题描述 假设我要UPDATE的表跟查询子句是同一张表,这样做有许多种原因,例如用统计数据更新表的字段(此时需要用group子句返回统计值),从某一条记录的字段update另一条记录,而不必使用非标准的语
python mysql中不能在同一个sql语句中,先select同一个表的某些值,然后再update这个表。
例: 首先新建表,插入值:DROP TABLE IF EXISTS table_score_one;CREATE TABLE table_score_one ( id INT (10) NOT NULL PRIMARY KEY auto_increment, student_no VARCHAR (10) NOT NULL, student_name VARCHAR (10
mysql update select 在同一张表的
mysql update和select 无法同时工作在同一张表上(优化器?行锁?) 可以这样解决: update t2 a1 set a1.d=(select d from ((select d from t2 where k23=3) as a2)) where a1.k23=1;
MySQL数据库同时查询更新同一张表
在平常的项目中,经常会碰到这样的问题:我需要在一张标中同时更新和查询出来的数据。例如:有如下图一张表数据,现在需要更新操作为:把status=1的name值更新为id=2的name值通常情况下我们会想到如下语句来实现这个需求:UPDATE tb_test SET NAME = ( SELECT NAME FROM tb_test WHERE
MySQL 如何对同一张表来查询并update ?
MySql 不允许对同一张表来查询并update的。 如下面的SQL则不能运行。 update thb As outer_thb set cnt=( select count(*) from thb as innter_thb where  innter_thb.type=outer_thb.type); 可以通过inner方式来达到这个目的,如下所示。 upda
sql语句中不能同时对一张变进行select和update或者delete操作
在进行sql查询时如果对一张表进行select的同时不能进行操作在这个sql语句中同时对w_wkn这张表进行了select查询操作,同时也进行了delete操作,这样的sql执行会报错 You can't specify target table 'w_wkn' for update in FROM clause正确的做法是操作第二张表,或者进行一张临时表这样就没问题。...
mysql触发器不能对同一张表进行修改操作的总结
我创建一个触发器 ,当user表有插入操作的时候  修改user表中id等于1 的用户得名字为张三 CREATE TRIGGER ins_user BEFORE INSERT ON users FOR EACH ROW  BEGIN UPDATE  users set name=' ' where id=1  ; END; [Err] 1442 - Can't updat