2014-02-24 59 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 
      ); 
相关问题