Mysql突破1093 delete where in 子查询限制

首页 mysql Mysql突破1093 delete where in 子查询限制
~~~ 热烈庆祝通天技术网开业大吉 ~~~

业务场景

假装一张A表存储学生信息,三个字段,id,name,class 假装一张B表存储学生成绩,两个字段,id,score

需求

从A表中删除班级6中成绩低于66的学生

原始SQL

delete from a where id in (select a.id from a INNER JOIN b ON a.id=b.id )

错误信息:

delete from a where id in (select a.id from a INNER JOIN b ON a.id=b.id )
> 1093 - You can't specify target table 'a' for update in FROM clause
> 时间: 0.006s

调整SQL,嵌套子查询

delete from a where id in 
( select id from (select a.id from a INNER JOIN b ON a.id=b.id where b.score<66 ) as n)

正确执行:

delete from a where id in ( select id from (select a.id from a INNER JOIN b ON a.id=b.id where b.score<66 ) as n)
> Affected rows: 2
> 时间: 0.028s

浅析

应该是出于数据保护策略吧,我试过创建视图,也是1093不让删除,不过select语句,子查询不会受影响。

除此之外要删除就只能建立额外字段,先标识,再通过标识去删除了。

通天国际 https://www.aqwdzy.com

复制链接 资源下载
资源下载

本文没有可供下载资源

点击下载

标题:Mysql突破1093 delete where in 子查询限制

分类:mysql

链接:https://www.tongtian.icu/content/100

版权:通天技术网(www.tongtian.icu)所分享发布内容,部分为网络转载,如有侵权请立即联系方式,我们第一时间删除并致歉!

评论 (评论区只画了下样式,还没做功能,这里短时间内不会更新,有问题弹射至网站底部工单系统)

电子邮件地址不会被公开。 必填项已用 * 标注

  • 通天技术网
    回复

    热烈庆祝通天技术网开业大吉

  • 通天技术网
    回复

    热烈庆祝通天技术网开业大吉

    相关文章