2
A
回答
1
首先,你可以选择这样的:
select * from some_table where some_fk_column not in (
select some_column from second_table
)
如果你得到好的结果,然后
delete from some_table where some_fk_column not in (
select some_column from second_table
)
2
如果你想要做的一切,不检查所有其他相关的表我说的方式,但你使用时应小心:
- 通过您的表循环
- 以这种方式删除的记录,如果有的话FK是存在,那么这个记录不会 删除(使用
TRY/CATCH
块)
你并不需要检查所有FK和表
注意:这方式假定级联删除被禁用。
Select *
Into #Tmp
From YOUR_TABLE
Declare @Id int
While EXISTS(SELECT * From #Tmp)
Begin
Select Top 1 @Id = Id From #Tmp
BEGIN TRY
DELETE FROM YOUR_TABLE WHERE [email protected]
END TRY
BEGIN CATCH
END CATCH
Delete FROM #Tmp Where Id = @Id
End
0
这是不漂亮,但它应该工作:
select m.ID
from mastertable m
where not exists(select 1 from table1 where fk_id = m.ID)
and not exists(select 1 from table2 where fk_id = m.ID)
and not exists(select 1 from table3 where fk_id = m.ID)
and not exists(select 1 from table4 where fk_id = m.ID)
and so on;
你会做的主表的表扫描(你要检查每一行),但只要任何引用在任何其他表中找到,那些扫描停止,并且主ID被拒绝。如果其他每个表中的FK列都被编入索引,那么这些将被搜索。任何能够一直贯穿的事物都是一个在任何表格中都没有引用的ID值。
现在只需将上面的查询提供给delete
语句,并且您摆脱了所有未引用的行。
相关问题
- 1. 当表格有FK关系时删除行
- 2. 如何从SQLAlchemy关系子表中删除所有行?
- 3. 如何删除neo4j中的所有节点和所有关系
- 4. Laravel - 删除没有关系
- 5. 如何删除表中的一行时删除所有相关的表记录?
- 6. YII - 如何删除所有表中的相关行?
- 7. RedBean:如何删除所有表中的所有行
- 8. 如何删除所有没有任何关系的节点 - neo4j/cypher
- 9. 的Django:删除所有M2M关系
- 10. 如何删除manytomany中的所有关系?
- 11. CakePHP方法删除连接表中的所有关系
- 12. 删除所有关系表中的记录
- 13. 如何删除MySQL中的所有表?
- 14. 如何删除与其他表具有外键关系的所有()记录
- 15. 如何从Laravel的表中获取所有行(没有软删除)?
- 16. 删除表中的所有行
- 17. cypher删除关系数大于数的所有节点关系
- 18. 我如何从2表中删除有关系的记录?
- 19. JPA- ManyToMany关系删除操作从辅助表中删除所有实体
- 20. 删除所有行
- 21. 如何删除django关系中的对象(保留所有相关对象)?
- 22. 如何通过核心数据关系删除所有对象?
- 23. 如何高效地从DB2中的表中删除所有行
- 24. 如何从sqlite中删除表中的所有行?
- 25. 从数据库的所有表中删除所有行
- 26. 删除组中的所有联系人
- 27. 如何在SQL中删除所有没有孩子的父母?
- 28. 删除所有行除了
- 29. 有没有办法使用c#和MS Access删除表中的所有行?
- 30. 跨行的fk pk关系
这也可能遭受级联删除问题的困扰。在不检查其他表的参考_before_删除行时,可能会触发级联删除。如果级联删除被禁用,那么它不应该是一个问题。 – HABO 2015-04-05 13:44:27