2017-09-14 108 views
0

我已经发现了一些重复的在我的表:oracle |删除重复记录

-- DUPLICATES: ---- 
select PPLP_NAME, 
     START_TIME, 
     END_TIME, 
     count(*) 
from PPLP_LOAD_GENSTAT 
group by PPLP_NAME, 
     START_TIME, 
     END_TIME 
having count(*) > 1 
-- DUPLICATES: ---- 

怎么可能删除它们?

回答

1

即使你没有主键,每个记录相关联的唯一的rowid。

通过使用下面的查询,您可以通过自我加入导致重复的列来删除没有最大行ID的记录。这将确保您删除任何重复项。

DELETE FROM PPLP_LOAD_GENSTAT plg_outer 
WHERE ROWID NOT IN(
    select MAX(ROWID) 
    from  PPLP_LOAD_GENSTAT plg_inner 
    WHERE plg_outer.pplp_name = plg_inner.pplg_name 
    AND  plg_outer.start_time= plg_inner.start_time 
    AND  plg_outer.end_time = plg_inner.end_time 
); 
1

我建议一些轻松:

CREATE table NewTable as 
SELECT DISTINCT pplp_name,start_time,end_time 
FROM YourTable 

然后删除表,并重新命名新表。

如果你真的要删除的记录,you can find a few examples of how here.

+0

请帮助我如何删除,我找不到方法! –