使用JOIN删除Netezza

时间:2014-03-03 04:25:43

标签: netezza

我在Netezza有两张桌子。表A有~70B记录,表B有~15K记录。删除需要在表A上发生但是我必须加入2列。我的查询看起来像这样

从A中删除(a.col1,a.col2)(从B中选择col1,col2)。

我认为计划成本很高,正在寻找替代方法。 netezza是否支持JOIN ON DELETE?有没有人有其他方法?

3 个答案:

答案 0 :(得分:2)

您可以使用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)

答案 1 :(得分:2)

您还可以使用EXISTS()作为替代语法:

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

编辑: 这个开销相当低,因为它不需要构建连接或收集任何东西,它只需要检查记录是否在那里。

答案 2 :(得分:0)

另一种方法是使用CTAS创建一个没有记录的表并重命名。我相信这里产生的成本会更少。

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;