合并语句与oracle sql中的ON子句不匹配

时间:2015-02-06 14:39:14

标签: sql oracle insert merge

我有oracle sql merge statement查询,其中我想将PROCESS_MONITOR_STATISTICTEMP_PROCESS_MONITOR_STATISTIC表中的数据合并。
ID是在PROCESS_MONITOR_STATISTIC表中生成的序列。所以我总是希望将数据放入TEMP_PROCESS_MONITOR_STATISTIC表,其ID大于PROCESS_MONITOR_STATISTIC的ID。因此,当我执行查询时,我总是希望将最新数据插入TEMP_PROCESS_MONITOR_STATISTIC表。我尝试了这个查询但没有得到最新的数据。

merge into TEMP_PROCESS_MONITOR_STATISTIC TSM
using (
   select * from
(select ID,PROCESS_MONITOR_ID,PROCESS_START_DATE from 
PROCESS_MONITOR_STATISTIC@FONIC_RETAIL) where rownum<=1000
) data
ON (TSM.ID > data.ID)
when not matched then
insert(ID,PROCESS_MONITOR_ID,PROCESS_START_DATE)
values(data.ID,data.PROCESS_MONITOR_ID,data.PROCESS_START_DATE);

2 个答案:

答案 0 :(得分:1)

如果你所做的只是“从A中插入表B中的项目,这些项目尚不存在”。

这应该这样做:

  INSERT INTO TEMP_PROCESS_MONITOR_STATISTIC
    select ID,PROCESS_MONITOR_ID,PROCESS_START_DATE
      from PROCESS_MONITOR_STATISTIC@FONIC_RETAIL
     minus 
       select ID,PROCESS_MONITOR_ID,PROCESS_START_DATE
         from TEMP_PROCESS_MONITOR_STATISTIC;

不需要MERGE。

答案 1 :(得分:1)

作为另一种选择......你可以试试这个:

  INSERT INTO TEMP_PROCESS_MONITOR_STATISTIC
    select ID,PROCESS_MONITOR_ID,PROCESS_START_DATE
      from PROCESS_MONITOR_STATISTIC@FONIC_RETAIL
     where id > (select max(id) from TEMP_PROCESS_MONITOR_STATISTIC );

仅根据目标表中的最大ID限制它。