问题描述
例如做一些剔重操作(利用自己表某些字段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 );
文章评论