2014-03-03 2 views
1

Netezza에는 두 개의 테이블이 있습니다. 표 A에는 ~ 70B 개의 레코드가 있고 표 B에는 ~ 15K 개의 레코드가 있습니다. 테이블 A에서 삭제 작업이 필요하지만 2 열에 가입해야합니다. 내 쿼리는 다음과 같습니다.JOIN을 사용하는 Netezza 삭제

A에서 삭제 (a.col1, a.col2)는 (select col1, B는 col2)에서 삭제하십시오.

계획이 매우 비용이 많이 들고 대안적인 접근 방법을 찾고 있습니다. Netezza는 JOIN ON DELETE를 지원합니까? 아무도 다른 접근법을 가지고 있습니까 ??

답변

1

당신은 당신이 찾고있는 것을 달성하기 위해 rowid를 사용할 수 있습니다

delete from table_A 
where rowid in (select a.rowid 
from table_A a inner join 
table_B b 
on a.col1=b.col1 
and a.col2=b.col2) 
+0

지금 나는 diff 방향으로가는 계획을 본다. 탐구하는 "존재"옵션. – user3373474

0

다른 방법은 기록하지 않고 CTAS를 사용하여 테이블을 생성하고 발생하는 비용이 적은 것으로 판단 .I 이름을 변경하는 것 여기. 또한 사용할 수 있습니다

create table T1 as select 
col1,col2 from A where (col1,col2) 
not in (select col1,col2 from B); 

drop table A; 

alter table T1 rename to A; 
1

는 대체 문법으로() 존재합니다

delete from table_A a 
where exists(select 1 from table_b b 
    where b.col1=a.col1 
     and b.col2=a.col2 
) 

편집 : 그것은 가입 또는 아무것도를 수집 구축 할 필요가 없기 때문에 이것의 오버 헤드가 매우 낮은 , 레코드가 있는지 확인해야합니다.

관련 문제