MySQL中不允许在子查询的同时删除表数据(不能一边查一边把查的表删了)
eg.删除emp_no重复的记录,只保留最小的id对应的记录。
思路:
(1)通过group by emp_no实现分组,获得最小min(id);
(2)在delete from titles_test 过程中,使用where子查询id not in();
错误语句:
delete from titles_test where id not in( select min(id) from titles_test group by emp_no );
解释:
MySQL中不允许在子查询的同时删除表数据(不能一边查一边把查的表删了);
但而sqllite可以这样做
解决措施:
如果要删除,必须查询出结果,给原始数据表取一个别名再删除;
正确语句:
delete from titles_test where id not in( select * from( select min(id) from titles_test group by emp_no)as a # 原始数据表取一个别名a );