2014-09-05 42 views
1

所以,我試圖完成一個查詢,刪除基於屬性值的行。像這樣的東西。SQL刪除子查詢時,表中有1:N的關係

DELETE FROM SPORTING_CLUBS 
WHERE state = 'NY'; 

然而,SPORTING_CLUBS表的主鍵(CLUB_ID)是兩個子表CLUB_ACTIVITY和CLUB_MEMBERSHIP外鍵/父。我有我需要遵循成功刪除的行中的兩個子表中的SPORTING_CLUBS表完成刪除操作前的邏輯的麻煩。

+1

您正在遵循邏輯正確。您需要刪除引用此表的記錄。您可以通過將參考定義爲「在刪除級聯」上自動執行此操作。 – 2014-09-05 01:04:02

+0

謝謝戈登!如果不使用你所建議的陳述,我只是不確定這種方式。我明白爲什麼上面的代碼拋出一個約束錯誤,我只是不知道如何使用子查詢解決它。 – 2014-09-05 01:38:52

回答

1

,如果你不能改變外鍵約束有ON CASCADE DELETE條款添加您需要從主表中刪除之前刪除子表中的記錄。我建議您使用交易來保護數據的完整性

BEGIN TRANSACTION; 
DELETE FROM CLUB_ACTIVITY 
WHERE CLUB_ID IN (
        SELECT CLUB_ID FROM SPORTING_CLUBS 
        WHERE state = 'NY'); 
DELETE FROM CLUB_MEMBERSHIP 
WHERE CLUB_ID IN (
        SELECT CLUB_ID FROM SPORTING_CLUBS 
        WHERE state = 'NY'); 
DELETE FROM SPORTING_CLUBS 
WHERE state = 'NY'; 
COMMIT;