如何解决删除不再有参考的行
我想删除seconde表中所有不再引用第一个或为'NULL'的行。并在可能的情况下进行单个查询。
我想到了一个外部联接,但是由于两个表都缺少行,所以那没有用。我也不能在代码中这样做,因为对于Oracle,“ IN”查询会变得很大,而我也不能仅循环访问,因为这将花费很长时间。这就是为什么我希望可以通过一个查询来完成?
解决方法
在大多数数据库中,not exists
是受支持的解决方案:
delete from table2
where ref is null or not exists (
select 1
from table1
where table1.id = table2.ref
)
请注意,通过在子表/列table2(re)
和父表table1(id)
之间设置适当的外键,可以更简单地解决此问题:外键具有on delete cascade
等有用的功能,可以在引擎盖下为您执行此类操作。
删除语句:
DELETE FROM Table2 LEFT JOIN Table1 ON ref=id WHERE Table1.id IS NULL
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。