我该如何优化更新语句

时间:2013-04-09 13:31:09

标签: oracle

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';

1 个答案:

答案 0 :(得分:0)

Mysql和MsSQL支持加入更新语句,但oracle没有使用以下查询

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;

P.S。请在实施前检查执行计划和成本。