2016-08-08 183 views
0

我有以下查詢重用選擇查詢結果的Oracle

SELECT ID FROM MARMELADES mrm 
where not exists 
    (SELECT 1 FROM TOYS toys 
    WHERE mrm.ID = toys.ID 
    AND mrm.INGREDIENT = toys.INGREDIENT 
    AND mrm.BOX_TYPE = 2) 
AND mrm.BOX_TYPE = 2 

它返回幾乎400多個ID的結果,例如[12, 33, 45, ... , 3405]

現在,我想刪除這是從所有的IDS從我的數據庫到處列出。這不僅是MARMELADES和玩具。此外,我有例如35 +表,我可以有這個ID)。

我會很高興,如果這種查詢可以像ALL_UNNEEDED_IDS一些功能提取這樣我就可以這樣使用它:

DELETE FROM ANOTHER_TABLE_1 WHERE ID IN (ALL_UNNEEDED_IDS) 
DELETE FROM ANOTHER_TABLE_2 WHERE ID IN (ALL_UNNEEDED_IDS) 
DELETE FROM ANOTHER_TABLE_3 WHERE ID IN (ALL_UNNEEDED_IDS) 
DELETE FROM ANOTHER_TABLE_4 WHERE ID IN (ALL_UNNEEDED_IDS) 
... 
DELETE FROM ANOTHER_TABLE_35 WHERE ID IN (ALL_UNNEEDED_IDS) 

這是可以做到在Oracle重用這樣的結果?

+3

創建一個臨時表並在其中存儲不需要的ID。 –

+0

如果所有這些表都通過此ID作爲FK進行關聯,聽起來像您應該將它們配置爲級聯刪除。否則,將查詢結果插入臨時表中,然後從所有刪除調用中引用該查詢結果。 – OldProgrammer

+0

看看這個: http://stackoverflow.com/questions/9119465/how-to-reuse-a-large-query-without-repeating-it –

回答

0

在後續查詢中使用第一個查詢。 IE:

DELETE FROM ANOTHER_TABLE_1 WHERE ID IN (
    SELECT ID FROM MARMELADES mrm 
    where not exists 
     (SELECT 1 FROM TOYS toys 
     WHERE mrm.ID = toys.ID 
     AND mrm.INGREDIENT = toys.INGREDIENT 
     AND mrm.BOX_TYPE = 2) 
    AND mrm.BOX_TYPE = 2 
); 

當你到達玩具和marmelades表時,你需要一個臨時持有人表格,正如@Gordon所示。