2014-02-24 96 views
0

我試圖通過查找由相關子查詢返回的結果集來從表中刪除數據。我的查詢如下。根據其他查詢的結果集從表中刪除

select DISTINCT M24no,M0no 
from V_SRC_I_FIN_ENGMNT_STG E 

上面的查詢將返回如下的表結果集。

M24no M0no 
2546 2570 

現在我需要刪除具有M24no和M0no之間MO_IDS I_IPV_LOB_PROG_PROV_MO_MTRC_TRNS表中的所有記錄。

我正在嘗試像下面這樣做,但它似乎是不正確的。有人可以建議我一個友好的解決方案嗎?

DELETE 
FROM I_IPV_LOB_PROG_PROV_MO_MTRC_TRNS 
WHERE LST_UPD_USERID='FINANCE' 
AND MO_ID IN 
(select DISTINCT M24no,M0no 
from V_SRC_I_FIN_ENGMNT_STG E) 

回答

2

這可以通過使用來實現的INNER JOINV_SRC_I_FIN_ENGMNT_STG表和BETWEEN條款:

DELETE A 
    FROM I_IPV_LOB_PROG_PROV_MO_MTRC_TRNS A 
    INNER JOIN V_SRC_I_FIN_ENGMNT_STG B ON A.MO_ID BETWEEN B.M24no AND B.M0no 
    WHERE LST_UPD_USERID = 'FINANCE' 

所以有效地你刪除一切表AI_IPV_LOB_PROG_PROV_MO_MTRC_TRNS)與BV_SRC_I_FIN_ENGMNT_STG)其中MO_ID介於M24noM0no之間。

+0

這工作得很好。但我改變了第二張表以減少執行時間。您的查詢永遠運行。 – Teja

0

可以使用exists做到這一點:

DELETE FROM I_IPV_LOB_PROG_PROV_MO_MTRC_TRNS 
WHERE LST_UPD_USERID ='FINANCE' AND 
     EXISTS (select 1 
       from V_SRC_I_FIN_ENGMNT_STG E 
       where MO_ID bewteen M24No and M0no 
      ); 
相關問題