我有一个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)
...嵌套查询集成到它上面的连接中。
有什么想法吗?
答案 0 :(得分: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)
马克