日期:2014-05-17  浏览次数:20746 次

关于update效率的一个很简单的问题 高手进来看看
有条语句 
UPDATE table1 PARTITION (P201206) a
  SET a.aa1=(SELECT b.bb2 from table2 b WHERE a.aa1 = b.bb1);

现在table1 有200W数据 表table2 有1W数据 我想把table1里面的表如果字段在table2里面有对应的话 把bb2字段赋给table1里面的aa1 我这边语句执行的太慢了 受不鸟了 

本来想用merge into 的 语句这样写:
MERGE INTO table1 a
USING table2 b
ON (a.aa1=b.bb1)
WHEN MATCHED THEN 
UPDATE SET a.aa1=b.bb2

但他提示‘无法更新on语句子句中引用的列:“A”,“aa1”’ 求解啊

------解决方案--------------------
UPDATE (SELECT /*+ BYPASS_UJVC*/
A.AA1, B.BB2
FROM TABLE1 A, TABLE2 B
WHERE A.AA1 = B.BB1)
SET AA1 = BB2

五年没来CSDN了,现在google搜索都很少进入到CSDN。
------解决方案--------------------
探讨

UPDATE (SELECT /*+ BYPASS_UJVC*/
A.AA1, B.BB2
FROM TABLE1 A, TABLE2 B
WHERE A.AA1 = B.BB1)
SET AA1 = BB2

五年没来CSDN了,现在google搜索都很少进入到CSDN。