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

Sql 根据其他查询的结果集从表中删除,sql,sql-server,tsql,sql-delete,correlated-subquery,Sql,Sql Server,Tsql,Sql Delete,Correlated Subquery,我试图通过查找相关子查询返回的结果集来删除表中的数据。我的问题如下 select DISTINCT M24no,M0no from V_SRC_I_FIN_ENGMNT_STG E M24no M0no 2546 2570 上述查询将返回如下表结果集 select DISTINCT M24no,M0no from V_SRC_I_FIN_ENGMNT_STG E M24no M0no 2546 2570 现在我需要从I_IPV_LOB_PROG_PROV_MO_MTRC_TRNS表中

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

select DISTINCT M24no,M0no
from V_SRC_I_FIN_ENGMNT_STG E
M24no M0no
2546  2570
上述查询将返回如下表结果集

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_ID介于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)

您可以使用
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
             );

这可以使用
V_SRC_I_FIN_ENGMNT_STG
表的
内部联接和
之间的
子句来实现:

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\u IPV\u LOB\u PROG\u MO\u MTRC\u TRNS
)中连接到
B
V\u SRC\u I\u FIN\u ENGMNT\u STG
)的所有内容,其中
MO\u ID
介于
M24no
M0no

之间。这很有效。但我更改了第二个表以缩短执行时间。您的查询将永远运行。