批量删除操作场景下
错误写法
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 关键字,可以将其中错误的数据行忽略,适用于批量操作大量的数据,当其中某些错误,可以忽略不记的情况