发布
社区首页 >问答首页 >oracle \\删除重复记录

oracle \\删除重复记录
EN

Stack Overflow用户
提问于 2017-09-14 14:35:07
回答 2查看 48关注 0票数 0

我在我的桌子上找到了一些副本:

代码语言:javascript
代码运行次数:0
复制
-- 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: ----

怎么可能把它们删除呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-09-15 06:00:07

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

通过使用下面的查询,您只删除没有最大行id的记录,方法是将表与导致重复的列自连接。这将确保删除任何副本。

代码语言:javascript
代码运行次数:0
复制
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
EN

Stack Overflow用户

发布于 2017-09-14 14:42:15

我建议一些更简单的方法:

代码语言:javascript
代码运行次数:0
复制
CREATE table NewTable as
SELECT DISTINCT pplp_name,start_time,end_time
FROM YourTable

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46221866

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档