精华内容
下载资源
问答
  • 查询及删除重复记录的SQL语句1、查找表中多余的重复记录,重复记录是根据单个字段(Id)来判断select * from 表 where Id in (select Id from 表 group by Id having count(Id) > 1)2、删除表中多余的重复记录,...

    查询及删除重复记录的SQL语句

    1、查找表中多余的重复记录,重复记录是根据单个字段(Id)来判断

    select * from 表 where Id in (select Id from 表 group by Id having count(Id) > 1)

    2、删除表中多余的重复记录,重复记录是根据单个字段(Id)来判断,只留有rowid最小的记录

    DELETE from 表 WHERE (id) IN ( SELECT id FROM 表 GROUP BY id HAVING COUNT(id) > 1) AND ROWID NOT IN (SELECT MIN(ROWID) FROM 表 GROUP BY id HAVING COUNT(*) > 1);

    3、查找表中多余的重复记录(多个字段)

    select * from 表 a

    where (a.Id,a.seq) in (select Id,seq from 表 group by Id,seq having count(*) > 1)

    4、删除表中多余的重复记录(多个字段),只留有rowid最小的记录

    delete from 表 a

    where (a.Id,a.seq) in (select Id,seq from 表 group by Id,seq having count(*) > 1)

    and rowid not in (select min(rowid) from 表 group by Id,seq having count(*)>1)

    5、查找表中多余的重复记录(多个字段),不包含rowid最小的记录

    select * from 表 a

    where (a.Id,a.seq) in (select Id,seq from 表 group by Id,seq having count(*) > 1)

    and rowid not in (select min(rowid) from 表 group by Id,seq having count(*)>1)

    (二)

    比方说

    在A表中存在一个字段“name”,

    而且不同记录之间的“name”值有可能会相同,

    现在就是需要查询出在该表中的各记录之间,“name”值存在重复的项;

    Select Name,Count(*) From A Group By Name Having Count(*) > 1

    如果还查性别也相同大则如下:

    Select Name,sex,Count(*) From A Group By Name,sex Having Count(*) > 1

    (三)

    方法一

    复制代码 代码如下:

    declare @max integer,@id integer

    declare cur_rows cursor local for select 主字段,count(*) from 表名 group by 主字段 having count(*) >; 1

    open cur_rows

    fetch cur_rows into @id,@max

    while @@fetch_status=0

    begin

    select @max = @max -1

    set rowcount @max

    delete from 表名 where 主字段 = @id

    fetch cur_rows into @id,@max

    end

    close cur_rows

    set rowcount 0 方法二

    "重复记录"有两个意义上的重复记录,一是完全重复的记录,也即所有字段均重复的记录,二是部分关键字段重复的记录,比如Name字段重复,而其他字段不一定重复或都重复可以忽略。

    1、对于第一种重复,比较容易解决,使用

    select distinct * from tableName

    就可以得到无重复记录的结果集。

    如果该表需要删除重复的记录(重复记录保留1条),可以按以下方法删除

    复制代码 代码如下:

    select distinct * into #Tmp from tableName

    drop table tableName

    select * into tableName from #Tmp

    drop table #Tmp

    发生这种重复的原因是表设计不周产生的,增加唯一索引列即可解决。

    2、这类重复问题通常要求保留重复记录中的第一条记录,操作方法如下

    假设有重复的字段为Name,Address,要求得到这两个字段唯一的结果集

    复制代码 代码如下:

    select identity(int,1,1) as autoID, * into #Tmp from tableName

    select min(autoID) as autoID into #Tmp2 from #Tmp group by Name,autoID

    select * from #Tmp where autoID in(select autoID from #tmp2)

    最后一个select即得到了Name,Address不重复的结果集(但多了一个autoID字段,实际写时可以写在select子句中省去此列)

    (四)

    查询重复

    复制代码 代码如下:

    select * from tablename where id in (

    select id from tablename

    group by id

    having count(id) > 1

    )

    免责声明:本站所有文章和图片均来自用户分享和网络收集,文章和图片版权归原作者及原出处所有,仅供学习与参考,请勿用于商业用途,如果损害了您的权利,请联系网站客服处理。

    展开全文
  • Oracle查询重复数据删除,只保留一条记录.docx
  • Xh xm zttimech 20100001张三在学2010.12.5 20100002李四休学2011.1.9 20100003王五在学2010.9.1 20100004钱六在学2010.9.1 张三在2011.1.1时已经复学了,所以状态为在学,但时间为最近次变化的时间2010.12.5 ...

    有两个表格Student 和 Change:

    表Student 记录学生的入学信息:

    Xh                 xm            zt timech

    20100001张三在学2010.9.1

    20100002李四在学2010.9.1

    20100003王五在学2010.9.1

    20100004钱六在学2010.9.1

    表Change 记录学生的学籍变化情况:

    xuhao    xh             ztchange timech

    120100001辍学2010.11.1

    220100001在学2010.12.5

    320100002休学2011.1.9

    420100003辍学2011.3.9

    520100002在学2011.6.6

    现要求查询指定时间的在校生人数,例如2011.1.20,按上两表结果应为:

    Xh                xm zttimech

    20100001张三在学2010.12.5

    20100002李四休学2011.1.9

    20100003王五在学2010.9.1

    20100004钱六在学2010.9.1

    张三在2011.1.1时已经复学了,所以状态为在学,但时间为最近一次变化的时间2010.12.5

    李四已经休学,变化时间为2011.1.9

    王五此时还没辍学,钱六一直没变,因此两人的记录都没变。

    如何用SQL语句完成以上查询呢? 谢谢!

    展开全文
  • Oracle中大批量删除数据的方法
  • Oracle 数据库删除数据

    千次阅读 2020-12-08 11:29:15
    SQL 代码: delete from table_name where ... from 后面接表名 where 后面接要删除的那行数据的字段特征。 注意字段要能保证能唯一删除一条

    SQL 代码:

    delete from table_name
    where ...

    from 后面接表名

    where 后面接要删除的那行数据的字段特征。

    注意字段要能保证能唯一删除这一条。

    展开全文
  • oracle删除亿级数据

    千次阅读 2021-08-20 10:33:59
    近期遇到个日志表记录了几年数据数据量较大(几亿数据),导致查询等操作较慢,为了效率,决定删除部分历史数据,想了三种方法如下: 通用步骤(每种方法之前先运行以下备份脚本): 1、备份 2021年之前数据 ...

    近期遇到一个日志表记录了几年数据,数据量较大(几亿数据),导致查询等操作较慢,为了提高效率,决定删除部分历史数据,想了三种方法如下:

    通用步骤(每种方法之前先运行以下备份脚本):

    1、备份 2021年之前数据

    create table table_log_b2020 as  select * from table_log a where a.logtime<date'2021-1-1';

    2、备份2021年数据

    create table table_log_2021 as  select * from table_log a where a.logtime>=date'2021-1-1';

    1、drop table ,然后再create table,插入数据

    1、drop table

    drop table table_log 

    2、create table table_log

    3、插入2021年数据

    insert into table_log select * from table_log_b2021;

    2、使用delete批量删除

    1、先去掉表索引,因为索引可能会影响删除效率

    2、批量执行删除语句,也可以以存过方式直接运行,按照数量删除

     delete  from table_log a  where a.logtime<date'2021-1-1' and rownum<5000000

    每500万一次,没去索引之前大约耗时85秒,删掉索引之后大约耗时50

    3、 使用truncate table ,然后再插入数据

    1、truncate table

    truncate  table table_log   耗时0.5s

    2、插入2021年数据

    insert into table_log   select * from table_log_b2021;  耗时 0.095s

    第一种涉及到删表结构,公司相关规定不可这么做,第二种效率较为低

    综合考虑使用了第三种,效率较为可观 ,秒秒钟把数据干干净。

     

    展开全文
  • Oracle删除数据

    千次阅读 2021-04-30 10:41:35
    本篇文章帮大家学习Oracle删除数据,包含了Oracle删除数据使用方法、操作技巧、实例演示和注意事项,有一定的学习价值,大家可以用来参考。在本教程中将学习如何使用Oracle DELETE语句从表中删除一行或多行数据...
  • oracle删除id重复数据,仅保留一条

    千次阅读 2020-03-13 10:55:31
    由于id未设置主键,导致重复导入数据时,id有很多重复,想要每个id只保留一条数据。肯定不能使用max(id)或min(id)来执行了。 但是由于rowID是唯一的,所以还是很好解决。 以下提供两种办法: 1.先根据id分组排序,...
  • Oracle数据库删除数据

    千次阅读 2016-04-10 20:36:19
    1.Delete语句  语法:Delete From ... //删除tableName中所有数据  Delete From tableName Where ; //删除表中符合条件的所有数据 2.Truncate语句  语法:Truncate Table tableName; //清空表数据 Dele
  • oracle删除重复数据保留第一条记录

    千次阅读 2020-03-02 09:54:57
    1、查找表中多余的重复记录,重复记录是根据单个字段(Id)来判断 ...2、删除表中多余的重复记录,重复记录是根据单个字段(Id)来判断,只留有rowid最小的记录 DELETE from 表 WHERE (id) IN (...
  • 删除大量Oracle数据方法总结Oracle删除超过50w记录的数据,如果直接使用delete,效率就严重受到了影响。那么首先我们需要了解对于这个表的数据,我们到底是全部删除,还是部分删除。这里有三个关键字我们需要...
  • oracle删除重复数据并保留一条

    千次阅读 2018-07-30 22:15:12
    1.删除单个字段,如下例子即为删除学号相同的学生数据,即每个学号记录一条学生数据 delete from stu t1 where t1.rowid not in ( select min(t2.rowid) from stu t2 ...
  • oracle数据处理中,有时会出现数据重复插入,并且不存在主键的情况,如何删除掉两条一模一样的数据中的一条并保留任意一条。 1.使用临时表处理 在两条重复数据一模一样的情况下,可以用临时表来存放数据,对原表...
  • 这个时候如果用delete删除重复数据并保留一条的时候会非常之慢,数据库直接卡死。 这个时候可以通过创建临时表来进行重复数据的筛选,然后删除原来的数据,把临时的表数据再移到数据库的表中。自己测试这种方法十几...
  • Oracle删除冗余数据,只保留一条

    千次阅读 2017-05-26 16:39:43
    今天去面试,面试官提了一个问题,删除oracle中的冗余数据,只保留id最小的一条。当时没有想明白,回来认真想了一下,总算有了点思路,现将sql贴出来,欢迎大家批评指正。 假设有这样一个表city表,表中有两个字段,...
  • oracle删除表中数据(delete与truncate)

    千次阅读 2021-05-07 11:50:02
    当表中的数据不需要时,则应该删除数据...、delete语句(1)有条件删除语法格式:delete [from] table_name [where condition];如:删除users表中的userid为‘001’的数据:delete from users where userid='001'...
  • Oracle 删除表中完全相同的两条数据

    千次阅读 2019-11-08 10:44:55
    删除之前首先做好备份!...删除重复数据 DELETE FROM table_name a WHERE a.rowid != ( SELECT max(b.rowid) FROM table_name b WHERE b.id = a.id) //根据rowid删除重复数据中较小的rowid ...
  • 1、查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断 SELECT * FROM people WHERE peopleid IN ( SELECT peopleid FROM people ...2、删除表中多余的重复记录,...
  • 数据库操作中,经常会因为导数据造成数据重复,需要进行数据清理,去掉冗余的数据,只保留正确的数据一:重复数据根据单个字段进行判断1、首先,查询表中多余的数据,由关键字段(name)来查询。select * from 表 ...
  • 平时工作中可能会遇到当试图对库表中的某列或几列创建唯一索引时,系统提示 ORA-01452 :不能创建唯一索引,发现重复记录。 下面总结一下几种查找和删除重复记录的方法(以表CZ为例): 表CZ的结构如下: SQL...
  • oracle数据表有过万条数据后,删除数据就变的特别慢,有时甚至会卡死,所以在此分享个小白操作,望对各位有帮助。 删除前: 从原表创建新表,即:先把需要的某些数据导入到新表里,或者不加条件即要删除原表的...
  • delete from t_account where feedate in (  select feedate  from t_account  group by feedate  having count(1)>1 ) and id not in (  select min(id)  from t_account ... group by
  • 更新或删除记录的时候,无法操作,或被锁解决   有的时候,让我们在oracle上做update 或者delete的时候,出现上时间无法获得操作结果, 一直处于正在处理之中,这时候要考虑是否oracle本身对该记录进行...
  • oracle 快速删除大批量数据方法(全部删除,条件删除删除大量重复记录) ** 全部删除 如果是删除某个表的所有数据,并且不需要回滚,使用 TRUNCATE 就ok了。 SQL> truncate table table_name; 条件删除 如果...
  • Oracle查询重复数据删除,只保留一条记录     前言   项目中,在“资源目录-在线编目”中,资源项子表存在多条重发数据,需要进行数据清理,删除重发的数据,最终只保留一条相同的数据。   操作的表名:R_...
  • Oracle 如何删除1000w条数据

    千次阅读 2015-07-01 20:56:57
    1.保留表,只删除数据: [code="sql"]truncate table tablename;[/code] 或者: [code="sql"]delete from mytable where 1 = 1 ; commit; [/code] 说明: [code="sql"] delete...
  • 本来打算用一条sql直接执行,但是数据量太大,所以正好拿存储过程练练。感谢我的同事对我的帮助。 要求:删除相同order_id的其他多余数据。id是主键 思路:对数据根据order_id排序,这样相同数据就会紧挨着,然后...
  • Oracle数据库删除重复数据

    万次阅读 2018-09-04 00:01:49
    Oracle数据库中如何删除重复数据。 第种情况:部分字段重复数据删除 先查询出那些数据是重复的: select 字段1 ,字段2 ,count(*) from 表名 group by 字段1 ,字段2 having count(*) &amp;gt...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 142,229
精华内容 56,891
关键字:

oracle删除一条数据