2009-09-08 52 views
0

我有一條SQL語句用於將編輯從一個表合併到另一個表。即該SQL語句可以執行得更好嗎?

UPDATE f 
SET f.AUDAPLCDE = m.AUDAPLCDE, f.AUDSTF_NO = m.AUDSTF_NO, 
f.AUDUPD_ID = m.AUDUPD_ID, f.AUDUPDDTE = m.AUDUPDDTE, 
f.UNTTYP = m.UNTTYP, f.UNTSTM_NO = m.UNTSTM_NO, 
f.UNTIND = f.UNTIND, f.UNQ = m.UNQ,  
f.TRNCTL_NO = m.TRNCTL_NO, f.TRN_NO = m.TRN_NO, 
f.STAEVT = m.STAEVT, f.SPSDTE = m.SPSDTE, 
f.RVRRSN = m.RVRRSN, f.AUDUPDTME = m.AUDUPDTME, 
f.RHTTYP = m.RHTTYP, f.ALCADJ = m.ALCADJ, 
f.RESFAC = m.RESFAC, f.PRTDTE = m.PRTDTE, 
f.POLREF = m.POLREF, f.OUTFAC = m.OUTFAC, 
f.OTHBENQTY = m.OTHBENQTY, f.ORIIND = m.ORIIND, 
f.ORIDTE = m.ORIDTE, f.INRTYP = m.INRTYP, 
f.INRREF = m.INRREF, f.FNDTRNTYP = m.FNDTRNTYP, 
f.FNDSUBTYP = m.FNDSUBTYP, f.FNDREF = m.FNDREF, 
f.FNDPRC = m.FNDPRC, f.EVTUNQ = m.EVTUNQ, 
f.EVTTRN_NO = m.EVTTRN_NO, f.EFVDTE = m.EFVDTE, 
f.DUEDTE = m.DUEDTE, f.CTBPCT = m.CTBPCT, 
f.CO_REF = m.CO_REF, f.CAL_YR = m.CAL_YR, 
f.BONSUBTYP = f.BONSUBTYP, f.BONSTA = m.BONSTA, 
f.BONDCL_YR = m.BONDCL_YR, f.BON_YR = m.BON_YR, 
f.BENTYP = m.BENTYP, f.BENREF = m.BENREF, 
f.BENQTY2 = m.BENQTY2, f.BENQTY1 = m.BENQTY1, 
f.AMT = m.AMT, f.ALCRTE = m.ALCRTE 
FROM FI700 f 
INNER JOIN MERGEDATA_FI700 m ON m.FI700_UNIQUE_ID = f.FI700_UNIQUE_ID 
          AND m.SSIS_UPDATE_TYPE = 'U' 
          AND m.SSIS_TIMESTAMP in (SELECT max(mm.SSIS_TIMESTAMP) 
                 FROM MERGEDATA_FI700 mm 
                 WHERE mm.FI700_UNIQUE_ID = m.FI700_UNIQUE_ID 
                 AND mm.SSIS_UPDATE_TYPE = 'U') 

真的,我只是想嘗試最新的編輯(通過TimeStamp)字段,因爲這將包含所有累積的編輯。我很肯定這可以做得更好,即以某種方式將SELECT max(mm.SSIS_TIMESTAMP) ...嵌套查詢集成到它上面的連接中。

有什麼想法?

回答

2

兩個小東西 - 不知道他們是否有很大的不同,雖然:

AND m.SSIS_TIMESTAMP in (SELECT max(mm.SSIS_TIMESTAMP) 
          FROM MERGEDATA_FI700 mm 
          WHERE mm.FI700_UNIQUE_ID = m.FI700_UNIQUE_ID 
          AND mm.SSIS_UPDATE_TYPE = 'U') 

1)是否有可用於在SSIS_TIMESTAMP的指數?

2)既然你選擇MAX值,你可以使用一個等號,而不是「IN」操作符:

AND m.SSIS_TIMESTAMP = (SELECT max(mm.SSIS_TIMESTAMP) 

馬克

+0

其實,對時間戳沒有索引。我將它添加到ID字段和UPDATE_TYPE字段。感謝'='評論。 – 2009-09-08 09:22:26

+0

查看您的SELECT max()查詢,您可能需要在(FI700_UNIQUE_ID,SSIS_UPDATE_TYPE,SSIS_TIMESTAMP)上創建索引,因爲您在該選擇中使用了所有三個字段。 – 2009-09-08 09:46:42

+0

@marc_s:在你前面的路,但以任何方式:) – 2009-09-08 10:07:56