2013-04-09 70 views
0
UPDATE UMSD_FILE_SNAPSHOT FS 
     SET (data_msisdn, data_timestamp) = (SELECT msisdn, sacct_estab_dt 
               FROM UMSD_FILE_SNAPSHOT_1D 
               WHERE cust_acct_no = 
                FS.cust_acct_no 
               AND cust_sacct_no = '1D' 
               AND ROWNUM < 2), 
      (fax_msisdn, fax_timestamp) = (SELECT msisdn, sacct_estab_dt 
               FROM UMSD_FILE_SNAPSHOT_1D 
              WHERE cust_acct_no = 
                FS.cust_acct_no 
               AND cust_sacct_no = '1F' 
               AND ROWNUM < 2), 
      (video_msisdn, video_timestamp) = (SELECT msisdn, sacct_estab_dt 
                FROM UMSD_FILE_SNAPSHOT_1D 
               WHERE cust_acct_no = 
                 FS.cust_acct_no 
                AND cust_sacct_no = '1V' 
                AND ROWNUM < 2) 
     WHERE NVL(twc_status, ' ') <> 'S' 
     AND cust_sacct_no = '1'; 
+0

你对WHERE子句中的所有列有某种索引吗?你可以粘贴'EXPLAIN PLAN'的输出吗? – 2013-04-09 13:46:26

回答

0

MySQL和MSSQL支持加入更新语句,但甲骨文并未因此使用下面的查询

MERGE 
INTO table1 
USING (
     SELECT t1.rowid AS rid, t2.code 
     FROM table1 t1 
     JOIN table2 t2 
     ON  table1.value = table2.DESC 
     WHERE table1.UPDATETYPE='blah' 
     ) 
ON  (rowid = rid) 
WHEN MATCHED THEN 
UPDATE 
SET  value = code; 

附:实施前请检查执行计划和成本。