根据其他查询的结果集从表中删除
问题描述:
我试图通过查找由相关子查询返回的结果集来从表中删除数据。我的查询如下。根据其他查询的结果集从表中删除
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)
答
这可以通过使用来实现的INNER JOIN
到V_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
)与B
(V_SRC_I_FIN_ENGMNT_STG
)其中MO_ID
介于M24no
和M0no
之间。
答
可以使用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
);
这工作得很好。但我改变了第二张表以减少执行时间。您的查询永远运行。 – Teja