一、问题描述
假定test数据库存在表titles_test,表内数据如下:
先要求删除emp_no重复的记录,只保留最小的id对应的记录。编写代码如下:
delete from titles_test
where id not in (
select min(id) from titles_test
group by emp_no);
报错:You can't specify target table 'titles_test' for update in FROM clause
二、原因分析
在MySQL中(注意是MySQL中,mssql与oracle不会出错),不允许一边select查询数据,同时根据条件进行更新update、删除delete表内数据。也就是说,不能边查边删。
三、解决方法
用from子查询将select查询到的临时数据变成表并起别名,这样可以避开错误!
运行结果如下👇,问题解决o(* ̄▽ ̄*)ブ