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
            );