0

我有两张桌子

table 1 : rm_example(customer, weekno, salenum, card_type,...., imputed)
table 2 : rm_dummy(customer, weekno, imputed)

表一中的估算列为空(所有列)。

我想将表 1 中的“估算”列设置为表 2 中的“估算”值,其中客户和周数不匹配....

在我写的查询下面......但它需要永远执行......

update rm_example e 
set e.imputed = 
      (select imputed  
       from rm_dummy d 
       inner join rm_example e on e.customer=d.customer and e.weekno=d.weekno)...

查询有问题吗?

我正在使用 sqldeveloperplus 处理远程数据库......我们正在谈论百万行。

4

2 回答 2

1

MERGE 通常比带有子查询的 UPDATE 快很多(语法可能看起来有点奇怪,但你会习惯的);这假设 rm_example 有一个主键列 PK:

MERGE INTO rm_example target
USING 
  (SELECT e.pk as e_pk,
          d.imputed  
   FROM rm_dummy d 
   INNER JOIN rm_example e ON e.customer=d.customer AND e.weekno=d.weekno) src
ON (target.pk = src.e_pk)
WHEN MATCHED THEN UPDATE
  SET target.imputed = src.imputed;
于 2013-07-16T06:13:26.343 回答
0

不确定它是否会比你已经完成的更快,但你试试这个

UPDATE
  (SELECT e.imputed, d.imputed
   FROM rm_example e 
   INNER JOIN rm_dummy d ON e.customer = d.customer AND e.weekno = d.weekno)
SET e.imputed = d.imputed;

在阅读了8 种批量更新方法比较 (Oracle)之后,我发现这确实是一种MERGE应使用语法的已弃用方法。但是,根据您的系统,这可能会有更好的性能

于 2013-07-16T06:08:15.020 回答