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
一年多之前 回复
youye_
youye_ mysql 版本 5.7.9 不能 你的mysql版本是多少
一年多之前 回复
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币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!