0

我有一个用于将编辑从一个表合并到另一个表的 SQL 语句。IE

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

真的,我只是想获取最新的编辑(通过时间戳)字段,因为这将包含所有累积的编辑。我很确定这可以做得更好,即以某种方式将SELECT max(mm.SSIS_TIMESTAMP)... 嵌套查询集成到它上面的连接中。

有什么想法吗?

4

1 回答 1

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) 

马克

于 2009-09-08T09:18:51.373 回答