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之间。这很有效。但我更改了第二个表以缩短执行时间。您的查询将永远运行。