场景:
我有一个表 table 记录扣除积分的记录
id aid fen
1 2 10
2 2 10
3 2 10
4 3 10
5 3 10
很明显 aid 为 2 的 重复扣除了2次 aid 为 3的重复扣了1次
那么现在我们来补救下,把多余的记录删除然后把多扣除的补回.
delete from table where id not in(select id from talbe group aid) ;
乍一看这个语句没什么问题(有网友反馈说:mssql,oracle 没有问题),但是执行后其实会报这个错误的
You can't specify target table 'table' for update in FROM clause
为了避免这个错误,我们还需要再套一个子查询 如:
delete from table where id not in(select id from (select id from talbe group aid) a)
这样写了之后 就顺利执行了,这个方法同样对update 的类似场景有效.
评论 (0)