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. 刪除行時如何刪除其他表中的所有關聯行? LARAVEL 5.4
- 7. 如何刪除除SQL中的所有行外的所有行
- 8. YII - 如何刪除所有表中的相關行?
- 9. Datamapper:刪除所有沒有關係的記錄
- 10. RedBean:如何刪除所有表中的所有行
- 11. 如何刪除所有沒有任何關係的節點 - neo4j/cypher
- 12. 刪除重複的行,沒有唯一的鍵 - 關係表
- 13. laravel5.2刪除所有關係的模型
- 14. 的Django:刪除所有M2M關係
- 15. 刪除所有沒有值的行
- 16. 如何刪除外鍵關係中的所有孩子
- 17. 如何刪除neo4j圖形中的所有關係?
- 18. 如何刪除manytomany中的所有關係?
- 19. 刪除ASP.NET表中的所有錶行
- 20. doctrine2 - 刪除所有一對多關係
- 21. 如何刪除emacs中的所有行?
- 22. 如何刪除jtable中的所有行?
- 23. 如何刪除多對多而不刪除關係中的所有對象?
- 24. 刪除所有關係表中的記錄
- 25. CakePHP方法刪除連接表中的所有關係
- 26. JPA一對多關係子錶行沒有被刪除
- 27. 如何刪除MySQL中的所有表?
- 28. 如何刪除所有表中的列
- 29. 如何刪除與其他表具有外鍵關係的所有()記錄
- 30. 沒有@刪除所有行註冊
這也可能遭受級聯刪除問題的困擾。在不檢查其他表的參考_before_刪除行時,可能會觸發級聯刪除。如果級聯刪除被禁用,那麼它不應該是一個問題。 – HABO 2015-04-05 13:44:27