删除未在另一个表中使用的记录

时间:2014-12-31 06:30:34

标签: mysql

我必须从mysql的一个表中删除许多记录。但有些记录与其他记录有外键关系。因此,当我触发删除命令时,它显示有关外键的错误,并回滚整个删除事务(这很自然)。在这种情况下,我必须过滤那些在其他表中使用(引用)的记录​​,然后删除。有没有为什么删除记录而不进行过滤?表示如果我触发删除命令,删除那些未使用(引用)的记录​​,并跳过在另一个表中使用的记录,而不显示错误或回滚。

1 个答案:

答案 0 :(得分:0)

使用left join检查关系并删除所有无关系的记录

delete t1
from tableToDeleteFrom t1
left join referenceTable t2 on t1.foreignKeyColumn = t2.keyColumn
where t2.keyColumn is null
and <your delete conditions>

如果您想要快速而肮脏的解决方案,可以使用ignore关键字来忽略执行期间的错误:

  

IGNORE关键字使MySQL在删除行的过程中忽略错误。 (解析阶段遇到的错误以通常的方式处理。)由于使用IGNORE而被忽略的错误将作为警告返回。

delete ignore from tableToDeleteFrom
where <your delete conditions>