2014-03-19 95 views
0

我有3個表格,這些表格不是用ON DELETE CASCADE選項創建的,也不是創建它們的選項。用腳本刪除級聯

我可能需要從連續三個表中刪除。有沒有辦法做到這一點只使用promotion_id作爲重點?因爲我需要以相反的順序進行刪除,該promotion_id由時間,我得到的相關表不見了。

我在想,要做到這一點的唯一方法是使用JOIN選擇3臺的鍵,然後分別使用它們。但是,如果有一個純粹的SQL解決方案,它會很好。

我使用JDBC,Spring和甲骨文。謝謝。

創建表test_rates( rate_id VARCHAR2(10)主鍵, 率數 );

create table test_offers (
    offer_id varchar2(10) primary key , 
    rate_id varchar2(10), 
    foreign key (rate_id) references test_rates (rate_id) 
); 

create table test_promotions (
    promotion_id varchar2(10) primary key , 
    offer_id varchar2(10), 
    foreign key (offer_id) references test_offers (offer_id) 
); 

insert into test_rates (rate_id,rate) values (1,199); 
insert into test_offers (offer_id,rate_id) values (11,1); 
insert into test_promotions (promotion_id,offer_id) values (21,11); 

commit; 

delete from test_promotions where promotion_id = 21; 

delete from test_offers where offer_id in (select offer_id from test_promotions where promotion_id = 1); -- key is gone by now 

回答

0

在通常情況下,當有單個報價ñ促銷(N> 1),它是沒有意義刪除的報價,如果一個促銷僅被刪除。你最終會得到孤兒的促銷活動。

如果你想刪除一個費率,這是有道理的,先刪除所有的孩子promotions然後所有的孩子offers然後刪除rate。在這種情況下,雖然,rate_id可以沿途使用。

如果刪除子記錄,沒有必要刪除父記錄除非這是一個要求,在這種情況下,開始尋找父ID和見上。