MySQL不允许在子查询的同时删除原表数据

MySQL不允许在子查询的同时删除原表数据

例子:在titles_test表中删除emp_no重复的记录,只保留最小的id对应的记录。

MySQL不允许在子查询的同时删除原表数据_第1张图片
执行下面这条语句,你会得到如下错误SQL_ERROR_INFO: "You can't specify target table 'titles_test' for update in FROM clause"

delete 
from titles_test 
where id not in(
	select min(id)
	from titles_test
	group by emp_no
    )

这是因为在MySQL中支持在子查询的同时删除原表数据。如果你确实需要这样做,你需要给从原表中查到的数据表起别名,然后在此基础上再进行删除。

delete 
from titles_test 
where id not in
    (select * from(
		select min(id)
		from titles_test
		group by emp_no
   		 ) t1
    )

最后得到如下表格:
MySQL不允许在子查询的同时删除原表数据_第2张图片

你可能感兴趣的:(数据库技术,mysql,sql,数据库)