MySQL中update/delete某张表条件中带有自身表不能更新的解决办法整理

2022-07-12 660点热度 0人点赞 0条评论

问题描述

例如做一些剔重操作(利用自己表某些字段group出来的信息,再进行更新或者删除)

update t_table set is_delete=1 where id not in (
select min(id) from t_table group by email
)

会报错提示如下信息:

1093 - You can't specify target table 't_test' for update in FROM clause

原因就是MySQL不允许同时更新和删除一张表,也就是你不能以一个查询的结果为条件 进行修改或删除

解决办法

  • 方法1:使用中间表把首次查询的结果再select一次,就可以了,示例如下:
update t_table set is_delete=1 where id not in (
       select id from (
              select min(id) as id from t_table group by email
       )
);
  • 方法2:把where里的查询条件新建成一个视图,再来查:
CREATE VIEW v_test AS select min(id) as id from t_table group by email;

update t_table set is_delete=1 where id not in (
       select id from v_test
);

 

admin

这个人很懒,什么都没留下

文章评论

您需要 登录 之后才可以评论