youye_
youye_
采纳率0%
2016-03-17 04: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 小灸舞 5年前

    不知道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);
    
    点赞 2 评论 复制链接分享
  • youye_ youye_ 5年前

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

    点赞 评论 复制链接分享
  • u011489205 ai2018 5年前

    使用下面的sql执行:

    UPDATE message_list SET Status = 1 WHERE RecID IN (SELECT t.* from (select  RecID from message_list ) t);
    
    点赞 评论 复制链接分享