2014-02-24 3 views
0

상관 하위 쿼리에서 반환 된 결과 집합을 조회하여 테이블에서 데이터를 삭제하려고합니다. 내 쿼리는 다음과 같습니다.다른 쿼리의 결과 집합을 기반으로 테이블에서 삭제

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) 

답변

2

V_SRC_I_FIN_ENGMNT_STG 테이블에 INNER JOINBETWEEN 절 :

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_IDM24noM0no 사이에 있습니다.

+0

잘 돌아갔습니다.하지만 실행 시간을 줄이기 위해 두 번째 테이블을 변경했습니다. 귀하의 질문은 영원히 계속됩니다. – Teja

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 
      ); 
관련 문제