每个派生表都必须拥有自己的别名
- 本次案例介绍
- SQL实际代码
一:实际案例解读
- 描述:有一个人员的邮件信息表Person,其中有Id、Email两个字段,但由于某些员工的操作失误,导致Email中存在重复的数据,因此需要进行删重处理;
- 分析:通过分析,可以想到使用delete from进行处理
二:SQL代码
错误示例:
delete from Person
where Id not in (
select min(id) from Person group by Email);
上面SQL代码会发生异常,出现You can't specify target table 'Person' for update in FROM clause
这样的异常提示,因为在同一张表中不能先select出某些数值,然后再update更新它;解决这种问题只需多嵌套一层子查询即可。
正确示例:
delete from Person
where Id not in (
select * from (select min(Id) from Person group by Email) p);
其中需要注意的事:必须给最里面的select语句重命名为p表,这样就会避免上面的异常情况发生。
以上就是SQL中派生表的异常原因及处理,更多内容敬请期待!