精华内容
下载资源
问答
  • Oracle查询表里重复数据

    万次阅读 2018-12-21 11:01:15
    一、查询结果只显示重复的字段 1. 查询重复的单个字段(group by) select 重复字段A, count(*) from 表 group by 重复字段A having count(*) > 1 2.查询重复的多个字段(group by) select 重复字段A, ...

    一、查询结果只显示重复的字段

    1. 查询重复的单个字段(group by)

    select 重复字段A, count(*)
      from 表
     group by 重复字段A
    having count(*) > 1

    2.查询重复的多个字段(group by)

    select 重复字段A, 重复字段B, count(*)
      from 表
     group by 重复字段A, 重复字段B
    having count(*) > 1

     

    二、查询结果显示重复数据的所有字段

    1.查询重复的单个字段( rowid)

    -- table a,table b  代表同一张表 
    select a.*
       from table a, table b
      where a.重复字段 = b.重复字段
        and a.rowid != b.rowid
      order by a.重复字段

    排序是为了更直观的比较多个重复数据

    2.查询重复的多个字段( rowid)

    --  table a, table b 代表同一张表
    select a.*
       from table a, table b
      where a.重复字段A = b.重复字段A
        and a.重复字段B = b.重复字段B
        and a.rowid != b.rowid
      order by a.重复字段A

    三、删除重复数据

    1.删除重复数据中rowid 最大的数据

    -- 先查出来看一眼  table a,table b 属于同一张表  rowid 最大的数据
    select *
      from table a
     where rowid != (select max(rowid)
                       from table b
                      where a.重复字段 = b.重复字段)
    
    -- 删除这部分数据  rowid 最大的数据
    
    delete from table a
     where rowid != (select max(rowid)
                       from table b
                      where a.重复字段 = b.重复字段)

    2.删除重复数据中rowid 最小的数据

    -- 先查出来看一眼  table a,table b 属于同一张表  rowid 最小的数据
    select *
      from table a
     where rowid != (select min(rowid)
                       from table b
                      where a.重复字段 = b.重复字段)
    
    -- 删除这部分数据  rowid 最小的数据
    
    delete from table a
     where rowid != (select min(rowid)
                       from table b
                      where a.重复字段 = b.重复字段)

    3.删除所有重复的数据

    -- 慎重考虑后执行,后悔记得及时回滚。
    
    delete from table group by 重复字段 having count(重复字段) > 1

    注意:如果误删了数据,请看这里

    回滚也不管用了,记得点这个链接,找回刚才删除的数据

    展开全文
  • 主要介绍了Oracle查询表里重复数据方法,需要的朋友可以参考下
  • Oracle查询询表表里里的的重重复复数数据据方方法法 这篇文章主要介绍了Oracle查询表里重复数据方法,需要的朋友可以参考下 一一背背景景 一张person表有id name的两个字段id是唯一的不允许重复id相同则认为是...
  • DELETE FROM assembly_supply_chain a WHERE a.supply_chain_id> ( SELECT min(b.supply_chain_id ) FROM assembly_supply_chain b WHERE a.mtl_item_code=b.mtl_item_code and a.subinventory_c
    DELETE  FROM  assembly_supply_chain     a   WHERE a.supply_chain_id> (
    
    SELECT min(b.supply_chain_id )   FROM assembly_supply_chain  b   
    WHERE  a.mtl_item_code=b.mtl_item_code   and a.subinventory_code=b.subinventory_code and a.production_line_code=b.production_line_code
    and a.bh_type=b.bh_type and a.store_house_code=b.store_house_code and a.wip_supply_type=b.wip_supply_type 
    );



    DELETE  FROM  MTL_LOGICAL_ZONE   a   WHERE a.id > (
    SELECT min(b.id)   FROM MTL_LOGICAL_ZONE b   
    WHERE  b.mtl_item_id=a.mtl_item_id   and a.logical_zone_id=b.logical_zone_id
    );


    /*****物料组***************/
    DELETE  FROM  mtl_group_ref     a   WHERE a.id> (
    SELECT min(b.id )   FROM mtl_group_ref  b   
    WHERE  a.mtl_item_id=b.mtl_item_id   and a.mtl_category_id=b.mtl_category_id --and a.subinv_code=b.subinv_code
    );

    DELETE  FROM  MTL_LOGICAL_ZONE     a   WHERE a.id> (
    SELECT min(b.id )   FROM MTL_LOGICAL_ZONE  b   
    WHERE  a.mtl_item_id=b.mtl_item_id   and a.logical_zone_id=b.logical_zone_id 
    );







    展开全文
  •  一张person表,有id和name的两个字段,id是唯一的不允许重复,id相同则认为是重复的记录。  二、解决  select id from group by id having count(*) > 1  按照id分组并计数,某个id号那一组的数量超过1条...

      一、背景

      一张person表,有id和name的两个字段,id是唯一的不允许重复,id相同则认为是重复的记录。

      二、解决

      select id from group by id having count(*) > 1

      按照id分组并计数,某个id号那一组的数量超过1条则认为重复。

     

    http://blog.163.com/ability_money/blog/static/185339259201221443031331/

    http://blog.163.com/aner_rui/blog/static/12131232820105901451809/

     

     

    oracle查询表中字段里数据是否有重复

    查单个字段:

    1
    2
    Sql代码  
    SELECT TEST_NAME, COUNT (*) FROM T_TEST GROUP BY TEST_NAME HAVING COUNT (*) > 1
    
    
    Oracle查询重复数据并删除,只保留一条记录
    
    1、查找表中多余的重复记录,重复记录是根据单个字段(Id)来判断
    select 
    * from 表 where Id in (select Id from 表 group byId 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)

     

    比如现在有一人员表 (表名:peosons)
    若想将姓名、身份证号、住址这三个字段完全相同的记录查询出来
    select p1.*
    from persons p1,persons p2
    where p1.id<>p2.id
    and  p1.cardid = p2.cardid and p1.pname = p2.pname and 
    p1.address = p2.address
    可以实现上述效果。
    几个删除重复记录的SQL语句
    1.用rowid方法
    2.用group by方法
    3.用distinct方法
    
    1。用rowid方法
    据据oracle带的rowid属性,进行判断,是否存在重复,语句如下:
    查数据:
    select * from table1 a where rowid !=(select max(rowid)
    from table1 b where a.name1=b.name1 and a.name2=b.name2……)
    删数据:
    delete  from table1 a where rowid !=(select max(rowid)
    from table1 b where a.name1=b.name1 and a.name2=b.name2……)
    
    2.group by方法
    查数据:
    select count(num), max(name) from student 
    --列出重复的记录数,并列出他的name属性
    group by num
    having count(num) >1 --按num分组后找出表中num列重复,即出现次数大于一次
    删数据:
    delete from student
    group by num
    having count(num) >1
    这样的话就把所有重复的都删除了。
    
    3.用distinct方法 -对于小的表比较有用
    create table table_new as   select distinct *   from table1 
    minux
    truncate table table1;
    insert into table1 select * from table_new;
    查询及删除重复记录的方法大全
    1、查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断
    select * from people
    where peopleId in (select peopleId from people group by 
    peopleId having count(peopleId) > 1)
    2、删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有rowid最小的记录
    delete from people
    where peopleId in (select peopleId from people group by 
    peopleId
    having count(peopleId) > 1)
    and rowid not in (select min(rowid) from people group by 
    peopleId having count(peopleId )>1)
    3、查找表中多余的重复记录(多个字段)
    select * from vitae a
    where (a.peopleId,a.seq) in (select peopleId,seq from vitae 
    group by peopleId,seq having count(*) > 1)
    
    4、删除表中多余的重复记录(多个字段),只留有rowid最小的记录
    delete from vitae a
    where (a.peopleId,a.seq) in (select peopleId,seq from vitae 
    group by peopleId,seq having count(*) > 1)
    and rowid not in (select min(rowid) from vitae group by 
    peopleId,seq having count(*)>1)
    5、查找表中多余的重复记录(多个字段),不包含rowid最小的记录
    select * from vitae a
    where (a.peopleId,a.seq) in (select peopleId,seq from vitae 
    group by peopleId,seq having count(*) > 1)
    and rowid not in (select min(rowid) from vitae group by 
    peopleId,seq having count(*)>1)
    
    (二)
    比方说
    在A表中存在一个字段“name”,
    而且不同记录之间的“name”值有可能会相同,
    现在就是需要查询出在该表中的各记录之间,“name”值存在重复的项;
    Select Name,Count(*) From A Group By Name Having Count(*) > 
    1
    如果还查性别也相同大则如下:
    Select Name,***,Count(*) From A Group By Name,*** 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
    )

     

    转载于:https://www.cnblogs.com/qmfsun/p/4871776.html

    展开全文
  • ORACLE查询重复数据

    千次阅读 2020-06-03 14:35:21
    1、查找表中多余的重复记录,重复记录是根据单个字段(userCode)来判断 select * from user where userCode in ( select userCode from user group by userCode having count (userCode) > 1) 2、删除...

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

    select 
    	* 
    from 
    	user
    where 
    	userCode
    in 
    	(select  userCode  from  user group by  userCode having count (userCode) > 1)
    

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

    delete from 
    	user 
    where 
    	userCode 
    in 
    	(select userCode from user group by  userCode having count (peopleId) > 1)
    and rowid not in 
    	(select min(rowid) from   user group by userCode having count(userCode)>1)
    

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

    select 
    	* 
    from 
    	user a
    where 
    	(a.userCode,a.userName) 
    in  
    	(select userCode,userName from user group by userCode,userName having count(*) > 1)
    

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

    delete from 
    	user a
    where
    	(a.userCode,a.userName) 
    in   
    	(select userCode,userName from user group by userCode,userName having count(*) > 1)
    and rowid not in 
    	(select min(rowid) from user group by userCode,userName having count(*)>1)
    

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

    select 
    	* 
    from 
    	user a
    where 
    	(a.userCode,a.userName)  
    in   
    	(select userCode,userName from user group by userCode,userName having count(*) > 1)
    and rowid not in 
    	(select min(rowid) from user group by userCode,userName having count(*)>1)
    
    展开全文
  • select  *  from  ( select  row_.*, ... rownum rownum_ ...数据量不是一条两条,而是很多条,需要分页显示,而上面这个sql语句是最常用的分页方式,而rownum是一个伪列,而我们经常误认为我们...则会出现重复数据
  • oracle删除表重复数据

    2021-03-29 15:38:14
    oracle删除表重复数据表里的每条数据都有345678条一模一样的数据时,我们需要删除的话,就使用下面的语句来删除: delete from student where name in(select name from student group by name) and rowid not ...
  • oracle查询重复数据方法

    万次阅读 2018-06-14 14:51:20
    SQL重复记录查询1、查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断select * from peoplewhere peopleId in (select peopleId from people group by peopleId having count(peopleId) &...
  • 删除oracle表里重复记录

    千次阅读 2011-07-21 12:58:23
    查找表里重复记录select count(*) from table_name where rowid in (select a.rowid from table_name a, table_name b where a.rowid 删除表里重复记录delete from
  • 主要介绍了Oracle表中重复数据去重的方法实例详解的相关资料,需要的朋友可以参考下
  • 2个表连接后查询结果有重复数据怎么解决 强调:是结果里面有重复数据,不是表里 这是两个表连接后的表![图片说明](https://img-ask.csdn.net/upload/201804/12/1523530295_170138.png) 运行如下代码 select y.bn as ...
  • 《转》做项目的时候,一位同事导数据的时候,不小心把一个表中的数据全都搞重了,也就是说,这个表里所有的记录都有一条重复的。这个表的数据是千万级的,而且是生产系统。也就是说,不能把所有的记录都删除,而且...
  • oracle 不插入重复数据

    2017-09-26 08:54:34
    请问下 我有个存储过程每天要向表里插入数据,使用insert如何只插入新的数据重复数据不插入。 代码如下; create or replace procedure cdr5 (v_date in out varchar2 )is v_sql varchar2(100); ...
  • 1、查找表中多余的重复记录,重复记录是根据单个字段(Id)来判断 select * from 表 where Id in (select Id from 表 group byId having count(Id) > 1) 2、删除表中多余的重复记录,重复记录是根据单个字段...
  • 一位同事导数据的时候,不小心把一个表中的数据全都搞重了,也就是说,这个表里所有的记录都有一条重复的。这个表的数据是千万级的,而且是生产系统。也就是说,不能把所有的记录都删除,而且必须快速的把重复记录...
  • 在几千条记录里,存在着些相同的记录,如何能用SQL语句,删除掉重复的呢 1、查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断 select * from people where peopleId in (select peopleId from...
  • oracle重复数据并显示出来

    万次阅读 2018-10-12 13:41:16
    oracle重复数据并显示出来一。查找重复记录1。查找全部重复记录2。过滤重复记录(只显示一条)二。删除重复记录1。删除全部重复记录(慎用)2。保留一条(这个应该是大多数人所需要的 ^_^)三、1、查找表中多余的...
  • oracle 查询重复记录

    2009-05-19 09:07:36
    说明:从A表查询FORMID不为重复的记录(FORMID不为空),且符合条件1。ID为primarykey。 select * from A where ID in (select max(ID) from A where 条件1=1 GROUP BY FORMID) order by ID desc...
  • select 字段, count(字段) from 表名 group by 字段 having count(字段)
  • 查单个字段: SELECTTEST_NAME,COUNT(*)FROMT_TESTGROUP BYTEST_NAMEHAVINGCOUNT(*) > 1 查组合字段: SELECT TEST_NAME1,TEST_NAME2,COUNT(*)FROMT_TESTGROUPBYTEST_NAME1,TEST_NAME2HAVINGCOUNT(*) >...
  • oracle 删除重复数据

    2014-05-21 15:03:44
     一、对于部分字段重复数据的删除  1.查询重复的数据  select 字段1,字段2, count(*) from 表名 group by 字段1,字段2 having count(*) > 1  例:Select owner from dba_tables group by owner h
  • *确定删除数据的时间(在删除数据之前的时间就行,不过最好是删除数据的时间点) *用以下语句找出删除的数据:select * from 表名 as of timestamp to_timestamp('删除时间点','yyyy-mm-dd hh24:mi:ss') *把删除的...
  • 一、背景  一张person表,有id和name的两个字段,id是唯一的不允许重复,id相同则认为是重复的记录。 二、解决  select id from group by id ...如何查询重复数据? 1 select字段1,字段2,co...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,464
精华内容 4,585
关键字:

oracle查询表里的重复数据