根据其他查询的结果集从表中删除

时间:2014-02-24 21:41:15

标签: sql sql-server tsql sql-delete correlated-subquery

我试图通过查找相关子查询返回的结果集来删除表中的数据。我的疑问如下。

select DISTINCT M24no,M0no
from V_SRC_I_FIN_ENGMNT_STG E

上面的查询将返回一个表结果集,如下所示。

M24no M0no
2546  2570

现在我需要删除I_IPV_LOB_PROG_PROV_MO_MTRC_TRNS表中的所有记录,其中MO_IDS在M24no和M0no之间。

我正在尝试像下面这样做,但似乎是不正确的。有人可以建议我一个友好的解决方案吗?

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 个答案:

答案 0 :(得分: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'

如此有效地删除了加入A I_IPV_LOB_PROG_PROV_MO_MTRC_TRNS的{​​{1}}(B)表中的所有内容,其中V_SRC_I_FIN_ENGMNT_STG介于{{1}之间}和MO_ID

答案 1 :(得分: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
             );