广告
返回顶部
首页 > 资讯 > 数据库 >oracle删除重复记录
  • 285
分享到

oracle删除重复记录

2024-04-02 19:04:59 285人浏览 薄情痞子
摘要

1.1 查找表中多余的重复记录 --查询出所有有重复的数据select DETaiL_ID,COMMENT_BODY,count(1)from BBSCOMMENTgroup by DETAIL_

1.1 查找表中多余的重复记录

--查询出所有有重复的数据
select DETaiL_ID,COMMENT_BODY,count(1)
from BBSCOMMENT
group by DETAIL_ID,COMMENT_BODY
having count(1)>1; --1955条

select rownum,DETAIL_ID,COMMENT_BODY from
(select DETAIL_ID,COMMENT_BODY,(count(1) over (partition by DETAIL_ID,COMMENT_BODY)) rk
from BBSCOMMENT)
where rk > 1;

1.2 显示了所有的非冗余的数据
--这一条命令显示了所有的非冗余的数据
select min(COMMENT_ID) as COMMENT_ID,DETAIL_ID,COMMENT_BODY
from BBSCOMMENT
group by DETAIL_ID,COMMENT_BODY; --21453条,之所以此值不等于表总记录数-1955,是因为1955条记录中,有的重复了不止一次。
1.3 如果记录数量少(千级别),可以把上面的语句做成子查询然后直接删除

--如果表数据量不是很大(1千条以内),可以把上面的语句做成子查询然后直接删除
delete from BBSCOMMENT where COMMENT_ID not in(
select min(COMMENT_ID)
from BBSCOMMENT
group by DETAIL_ID,COMMENT_BODY
); --782秒,在我这里,2万条记录,重复记录2千多(太慢了!!)

1.4 另一种删除方法

--这条语句也能够实现上述功能,但不好测试了,数据已经被我删除了
--删除条件一:有重复数据的记录;条件二:保留最小rowid的记录。
delete from BBSCOMMENT a
where
(a.DETAIL_ID,a.COMMENT_BODY) in(select DETAIL_ID,COMMENT_BODY from BBSCOMMENT group by DETAIL_ID,COMMENT_BODY having count(1) > 1)
and rowid not in (select min(rowid) from BBSCOMMENT group by DETAIL_ID,COMMENT_BODY having count(1)>1);

delete from BBSCOMMENT a
where rowid not in
(select min(row_id) from BBSCOMMENT group by DETAIL_ID,COMMENT_BODY);

注:rowid就是唯一标志记录物理位置的一个id。oracle数据库的表中的每一行数据都有一个唯一的标识符,或者称为rowid,在oracle内部通常就是使用它来访问数据的。rowid需要 10个字节的存储空间,并用18个字符来显示。该值表明了该行在oracle数据库中的物理具体位置。可以在一个查询中使用rowid来表明查询结果中包含该值。

1.5 大数据量还是用PL/sql方便快捷

declare
--定义存储结构
type bbscomment_type is record
(
comment_id BBSCOMMENT.COMMENT_ID%type,
detail_id BBSCOMMENT.DETAIL_ID%type,
comment_body BBSCOMMENT.COMMENT_BODY%type
);
bbscomment_record bbscomment_type;

--可供比较的变量
v_comment_id BBSCOMMENT.COMMENT_ID%type;
v_detail_id BBSCOMMENT.DETAIL_ID%type;
v_comment_body BBSCOMMENT.COMMENT_BODY%type;

--其它变量
v_batch_size integer := 5000;
v_counter integer := 0;

cursor cur_dupl is
--取出所有有重复的记录
select COMMENT_ID, DETAIL_ID, COMMENT_BODY
from BBSCOMMENT
where(DETAIL_ID, COMMENT_BODY) in (
--这些记录有重复
select DETAIL_ID, COMMENT_BODY
from BBSCOMMENT
group by DETAIL_ID, COMMENT_BODY
having count(1) > 1)
order by DETAIL_ID, COMMENT_BODY;
begin
for bbscomment_record in cur_dupl loop
if v_detail_id is null or (bbscomment_record.detail_id != v_detail_id or nvl(bbscomment_record.comment_body, ' ') != nvl(v_comment_body, ' ')) then
--首次进入、换记录了,都重新赋值
v_detail_id := bbscomment_record.detail_id;
v_comment_body := bbscomment_record.comment_body;
else
--其它记录删除
delete from BBSCOMMENT where COMMENT_ID = bbscomment_record.comment_id;
v_counter := v_counter + 1;

        if mod(v_counter, v_batch_size) = 0 then
            --每多少条提交一次
            commit;
        end if;
    end if;
end loop;

if v_counter > 0 then
    --最后一次提交
    commit;
end if;

dbms_output.put_line(to_char(v_counter)||'条记录被删除!');

exception
when others then
dbms_output.put_line('sqlerrm-->' ||sqlerrm);
rollback;
end;

您可能感兴趣的文档:

--结束END--

本文标题: oracle删除重复记录

本文链接: https://www.lsjlt.com/news/43353.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • oracle删除重复记录
    1.1 查找表中多余的重复记录 --查询出所有有重复的数据select DETAIL_ID,COMMENT_BODY,count(1)from BBSCOMMENTgroup by DETAIL_...
    99+
    2022-10-18
  • Oracle如何删除表中重复记录
    1    引言 在对数据库进行操作过程中我们可能会遇到这种情况,表中的数据可能重复出现,使我们对数据库的操作过程中带来 读诸 多不便,那么怎么删除这些重复没...
    99+
    2022-11-30
    oracle 如何 删除
  • MySQL中删除重复记录
    工作中,我们经常有需要删除一些重复数据的这种需求。重复数据可能是程序bug造成的 好,让我们看看如何删除这些重复数据 删除重复数据的思路呢,是这样的,查看根据这个重复字段分组后的结果有没有大于1的情况如果有...
    99+
    2022-10-18
  • mysql中怎样删除重复记录
    这期内容当中小编将会给大家带来有关mysql中怎样删除重复记录,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1、确认一下基表和过渡表的数据量。mysql> sele...
    99+
    2022-10-18
  • ORACLE恢复删除表或表记录
    一:表的恢复 对误删的表,只要没有使用PURGE永久删除选项,那么从flash back区恢复回来希望是挺大的。一般步骤有: 1、从flash back里查询被删除的表 select...
    99+
    2022-10-18
  • SQL中怎么删除ACCESS重复记录
    这期内容当中小编将会给大家带来有关SQL中怎么删除ACCESS重复记录,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。 有两个意义上的重复记录,一是完全重复的记录...
    99+
    2022-10-18
  • MySQL中如何删除表重复记录
    本篇文章给大家分享的是有关MySQL中如何删除表重复记录,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。 创建实验...
    99+
    2022-10-18
  • MySQL中怎么删除重复的记录
    MySQL中怎么删除重复的记录,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1、查找全部重复记录select * ...
    99+
    2022-10-18
  • mysql中删除重复记录的方法
    这篇文章主要讲解了“mysql中删除重复记录的方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“mysql中删除重复记录的方法”吧! ...
    99+
    2022-10-18
  • oracle如何删除重复数据保留第一条记录
    小编给大家分享一下oracle如何删除重复数据保留第一条记录,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!oracle删除重复数...
    99+
    2022-10-18
  • MySQL如何查询和删除重复记录
    这篇文章运用简单易懂的例子给大家介绍MySQL如何查询和删除重复记录,代码非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。查找所有重复标题的记录:select title,count...
    99+
    2022-10-18
  • MySQL 中如何删除单表重复记录
    本篇文章给大家分享的是有关MySQL 中如何删除单表重复记录,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。1、创建表test001 点击...
    99+
    2022-10-18
  • Oracle中怎么刪除表的重复记录
    本篇文章为大家展示了Oracle中怎么刪除表的重复记录,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。 刪除 table:ZZMSTR.F...
    99+
    2022-10-18
  • 如何删除MySQL表中的所有重复记录?
    要从表中删除重复记录,我们可以使用 DELETE 命令。现在让我们创建一个表。 mysql> create table DuplicateDeleteDemo -> ( -> id int, -...
    99+
    2023-10-22
  • 利用SQL语句怎么删除重复的记录
    利用SQL语句怎么删除重复的记录?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。如果要删除手机(mobilePhone),电话(...
    99+
    2022-10-18
  • mysql删除数据库中重复记录的方法
    这篇文章给大家分享的是有关mysql删除数据库中重复记录的方法的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。mysql删除数据库中重复记录的步骤:1、统计重复数据;2、使用“SE...
    99+
    2022-10-18
  • mysql表中删除重复记录,只保留一条记录的操作
    mysql表中两个字段重复记录,只保留一条记录的操作 例如有一张学生表 其中name 和 class 相同的视为重复记录,需要保留一条记录,删除重复记录, 两种操作方式如下: 方法一: group ...
    99+
    2023-09-27
    mysql 数据库
  • SQL语句删除重复记录且只保留一条有效记录
    1.查找表中多余的重复记录,重复记录是根据单个字段(name)来判断 select * from libwhere name in (select name from lib group by name ha...
    99+
    2023-09-02
    数据库 mysql Powered by 金山文档
  • oracle怎么查看删除记录
    要查看Oracle数据库中删除的记录,可以通过以下步骤进行:1. 首先,使用管理员权限登录到Oracle数据库。2. 执行以下命令创...
    99+
    2023-09-04
    oracle
  • MySQL中查询、删除重复记录的方法大全
      前言 本文主要给大家介绍了关于MySQL中查询、删除重复记录的方法,分享出来供大家参考学习,下面来看看详细的介绍: 查找所有重复标题的记录: 1 select title,count(*) as cou...
    99+
    2018-05-22
    MySQL中查询 删除重复记录的方法大全
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作