我有两张桌子
table 1 : rm_example(customer, weekno, salenum, card_type,...., imputed)
table 2 : rm_dummy(customer, weekno, imputed)
表1中的插补列为空(所有列)。
我想设置"估算"表1中的列值为"估算"在表2中,customer和weekno匹配....
在我写的查询下面.....但是它需要永远执行......
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处理远程数据库......我们正在讨论数百万行。
答案 0 :(得分: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;
答案 1 :(得分: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 Bulk Update Methods Compared (Oracle)后,我发现这是一个不推荐的方法,应该使用MERGE
语法。但是,根据您的系统,这可能会有更好的性能