五好的Book

mysql 更新/删除 同表条件子查询的错误解决之道

场景:
我有一个表 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 的类似场景有效.

本原创文章未经允许不得转载 | 当前页面:五好的Book » mysql 更新/删除 同表条件子查询的错误解决之道

评论

文章评论已关闭!