我有oracle sql merge statement查询,其中我想将PROCESS_MONITOR_STATISTIC
到TEMP_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);
答案 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限制它。