批量删除操作场景下
错误写法
SQL:DELETE FROM table WHERE ID IN(SELECT ID FROM table);
报错:You can’t specify target table ‘saas_tenant_student’ for update in FROM clause
原因:我们不能SELECT某些值,然后直接进行更新操作
解决方案
-
利用中间表巧妙解决
SQL:DELETE FROM table WHERE t.ID IN(SELECT ID FROM(SELECT ID FROM table) t);
原理:将SELECT出的结果再通过中间表SELECT一遍
-
完美写法
SQL:DELETE IGNORE FROM table WHERE t.ID IN(SELECT ID FROM(SELECT ID FROM table) t);
原理:IGNORE 关键字,可以将其中错误的数据行忽略,适用于批量操作大量的数据,当其中某些错误,可以忽略不记的情况
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/85469.html