mysql 更新/删除 同表条件子查询的错误解决之道
侧边栏壁纸
  • 累计撰写 185 篇文章
  • 累计收到 24 条评论

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

五好
2018-07-25 / 0 评论 / 740 阅读 / 正在检测是否收录...

场景:
我有一个表 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

评论 (0)

取消