【问题标题】:oracle | delete duplicates records甲骨文 |删除重复记录
【发布时间】:2017-09-15 14:00:07
【问题描述】:

我在我的表中发现了一些重复项:

-- 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: ----

如何删除它们?

【问题讨论】:

    标签: oracle


    【解决方案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
    );
    

    【讨论】:

      【解决方案2】:

      我建议更简单的:

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

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

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

      【讨论】:

      • 请帮我如何删除,我找不到方法!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-06-19
      • 1970-01-01
      • 2018-05-10
      • 2017-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多