我试图通过查找相关子查询返回的结果集来删除表中的数据。我的疑问如下。
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)
答案 0 :(得分:2)
这可以使用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
的{{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
);