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
  1.  
  2. Oracle查询重复数据并删除,只保留一条记录
  3.  
  4. 1、查找表中多余的重复记录,重复记录是根据单个字段(Id)来判断
  5. select 
  6. * from  where Id in (select Id from  group byId having count(Id) > 
  7. 1)
  8.  
  9. 2、删除表中多余的重复记录,重复记录是根据单个字段(Id)来判断,只留有rowid最小的记录
  10. DELETE 
  11. from  WHERE (id) IN ( SELECT id FROM  GROUP BY id HAVING COUNT(id) > 1) AND 
  12. ROWID NOT IN (SELECT MIN(ROWID) FROM  GROUP BY id HAVING COUNT(*) > 
  13. 1);
  14.  
  15. 3、查找表中多余的重复记录(多个字段)
  16. select 
  17. * from  a where (a.Id,a.seq) in(select Id,seq from  group by Id,seq having 
  18. count(*) > 1)
  19.  
  20. 4、删除表中多余的重复记录(多个字段),只留有rowid最小的记录
  21. delete 
  22. from  a where (a.Id,a.seq) in (select Id,seq from  group by Id,seq having 
  23. count(*) > 1) and rowid not in (select min(rowid) from  group by Id,seq 
  24. having count(*)>1)
  25.  
  26. 5、查找表中多余的重复记录(多个字段),不包含rowid最小的记录
  27. select 
  28. * from  a where (a.Id,a.seq) in (select Id,seq from  group by Id,seq having 
  29. count(*) > 1) and rowid not in (select min(rowid) from  group by Id,seq 
  30. having count(*)>1)
  1. 比如现在有一人员表 (表名:peosons
  2. 若想将姓名、身份证号、住址这三个字段完全相同的记录查询出来
  3. select p1.*
  4. from persons p1,persons p2
  5. where p1.id<>p2.id
  6. and  p1.cardid = p2.cardid and p1.pname = p2.pname and 
  7. p1.address = p2.address
  8. 可以实现上述效果。
  9. 几个删除重复记录的SQL语句
  10. 1.rowid方法
  11. 2.group by方法
  12. 3.distinct方法
  13.  
  14. 1。用rowid方法
  15. 据据oracle带的rowid属性,进行判断,是否存在重复,语句如下:
  16. 查数据:
  17. select * from table1 a where rowid !=(select maxrowid
  18. from table1 b where a.name1=b.name1 and a.name2=b.name2……)
  19. 删数据:
  20. delete  from table1 a where rowid !=(select maxrowid
  21. from table1 b where a.name1=b.name1 and a.name2=b.name2……)
  22.  
  23. 2.group by方法
  24. 查数据:
  25. select countnum), maxname from student 
  26. --列出重复的记录数,并列出他的name属性
  27. group by num
  28. having countnum >1 --按num分组后找出表中num列重复,即出现次数大于一次
  29. 删数据:
  30. delete from student
  31. group by num
  32. having countnum >1
  33. 这样的话就把所有重复的都删除了。
  34.  
  35. 3.distinct方法 -对于小的表比较有用
  36. create table table_new as   select distinct *   from table1 
  37. minux
  38. truncate table table1;
  39. insert into table1 select * from table_new;
  40. 查询及删除重复记录的方法大全
  41. 1、查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断
  42. select * from people
  43. where peopleId in select peopleId from people group by 
  44. peopleId having countpeopleId > 1
  45. 2、删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有rowid最小的记录
  46. delete from people
  47. where peopleId in select peopleId from people group by 
  48. peopleId
  49. having countpeopleId > 1
  50. and rowid not in select minrowid from people group by 
  51. peopleId having countpeopleId )>1
  52. 3、查找表中多余的重复记录(多个字段)
  53. select * from vitae a
  54. where a.peopleId,a.seq in select peopleId,seq from vitae 
  55. group by peopleId,seq having count(*) > 1
  56.  
  57. 4、删除表中多余的重复记录(多个字段),只留有rowid最小的记录
  58. delete from vitae a
  59. where a.peopleId,a.seq in select peopleId,seq from vitae 
  60. group by peopleId,seq having count(*) > 1
  61. and rowid not in select minrowid from vitae group by 
  62. peopleId,seq having count(*)>1
  63. 5、查找表中多余的重复记录(多个字段),不包含rowid最小的记录
  64. select * from vitae a
  65. where a.peopleId,a.seq in select peopleId,seq from vitae 
  66. group by peopleId,seq having count(*) > 1
  67. and rowid not in select minrowid from vitae group by 
  68. peopleId,seq having count(*)>1
  69.  
  70. (二)
  71. 比方说
  72. A表中存在一个字段“name”,
  73. 而且不同记录之间的“name”值有可能会相同,
  74. 现在就是需要查询出在该表中的各记录之间,“name”值存在重复的项;
  75. Select Name,Count(*) From A Group By Name Having Count(*) > 
  76. 1
  77. 如果还查性别也相同大则如下:
  78. Select Name,***,Count(*) From A Group By Name,*** Having 
  79. Count(*) > 1
  80.  
  81. (三)
  82. 方法一
  83. declare @max integer,@id integer
  84. declare cur_rows cursor local for select 主字段,count(*) from 表名 
  85. group by 主字段 having count(*) >; 1
  86. open cur_rows
  87. fetch cur_rows into @id,@max
  88. while @@fetch_status=0
  89. begin
  90. select @max = @max -1
  91. set rowcount @max
  92. delete from 表名 where 主字段 = @id
  93. fetch cur_rows into @id,@max
  94. end
  95. close cur_rows
  96. set rowcount 0
  97.  
  98. 方法二
  99. "重复记录"有两个意义上的重复记录,一是完全重复的记录,也即所有字段均重复的记录,二是部分关键字段重复的记录,
  100. 比如Name字段重复,而其他字段不一定重复或都重复可以忽略。
  101. 1、对于第一种重复,比较容易解决,使用
  102. select distinct * from tableName就可以得到无重复记录的结果集。
  103. 如果该表需要删除重复的记录(重复记录保留1条),可以按以下方法删除
  104. select distinct * into #Tmp from tableName
  105. drop table tableName
  106. select * into tableName from #Tmp
  107. drop table #Tmp
  108. 发生这种重复的原因是表设计不周产生的,增加唯一索引列即可解决。
  109.  
  110. 2、这类重复问题通常要求保留重复记录中的第一条记录,操作方法如下
  111. 假设有重复的字段为Name,Address,要求得到这两个字段唯一的结果集
  112. select identityint,1,1 as autoID, * into #Tmp from 
  113. tableName
  114. select minautoID as autoID into #Tmp2 from #Tmp group by 
  115. Name,autoID
  116. select * from #Tmp where autoID in(select autoID from 
  117. #tmp2)
  118. 最后一个select即得到了NameAddress不重复的结果集(但多了一个autoID字段,实际写时可以写在select子句中省去此列)
  119.  
  120. (四)
  121. 查询重复
  122. select * from tablename where id in 
  123. select id from tablename
  124. group by id
  125. having countid > 1

Oracle查询表里的重复数据方法:的更多相关文章

  1. Oracle查询表里的重复数据方法

    select id from group by id having count(*) > 1 按照id分组并计数,某个id号那一组的数量超过1条则认为重复. 如何查询重复的数据 select 字 ...

  2. mysql查询表里的重复数据方法:

    INSERT INTO hk_test(username, passwd) VALUES ('qmf1', 'qmf1'),('qmf2', 'qmf11') delete from hk_test  ...

  3. mysql查询表里的重复数据方法

    select username,count(*) as count from hk_test group by username having count>1;

  4. Oracle查询和过滤重复数据

    对数据库某些意外情况,引起的重复数据,如何处理呢? ----------------查重复: select * from satisfaction_survey s and s.project_no ...

  5. Oracle查询及删除重复数据

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

  6. mysql查询表里的重复数据

    先贴个简单的SQL语句 select username,count(*) as count from hk_test group by username having count>1; 使用详情 ...

  7. EF 查询视图出现重复数据

    解决方案: 由多张表组成的视图,要加实体键.而且实体键组合要能确保唯一性. 个人理解:确保唯一性,一个或多个实体键,实现了复合主键或组合主键的效果. 这样查询是,延迟加载机制,才知道哪些需要重新从数据 ...

  8. Oracle 查询重复数据方法

    查询某个字段存在重复数据的方法: select * from tablename where id in (select id from tablename group by id having co ...

  9. orcl数据库查询重复数据及删除重复数据方法

    工作中,发现数据库表中有许多重复的数据,而这个时候老板需要统计表中有多少条数据时(不包含重复数据),只想说一句MMP,库中好几十万数据,肿么办,无奈只能自己在网上找语句,最终成功解救,下面是我一个实验 ...

随机推荐

  1. 你无法修改 Git 的历史记录

    转自:http://www.oschina.net/news/26241/you-can-not-change-git-history 有时候使用Git工作得小心翼翼,特别是涉及到一些高级操作,例如 ...

  2. mysql 的设置

    网上的一些文章都已经比较老了,现在版本高了之后,其实配置是很省力的(不考虑什么负载的话) 分享全过程,出了文中提到的安装epel rpmfushion 源指令不同外,其他的过程也适用与Centos 5 ...

  3. Java主流日志工具库

    在项目开发中,为了跟踪代码的运行情况,常常要使用日志来记录信息.在Java世界,有很多的日志工具库来实现日志功能,避免了我们重复造轮子.我们先来逐一了解一下主流日志工具. 1.java.util.lo ...

  4. tomcat安全配置(二)

    1. JVM 1.1. 使用 Server JRE 替代JDK. 服务器上不要安装JDK,请使用 Server JRE. 服务器上根本不需要编译器,代码应该在Release服务器上完成编译打包工作. ...

  5. bwa的使用方法

    bwa的使用需要两中输入文件:    Reference genome data(fasta格式 .fa, .fasta, .fna)    Short reads data (fastaq格式 .f ...

  6. 在Shell里面判断字符串是否为空

     在Shell里面判断字符串是否为空 分类: Linux shell2011-12-28 23:18 15371人阅读 评论(0) 收藏 举报 shell 主要有以下几种方法: echo “$str” ...

  7. C# Dictionary和Dynamic类型

    开发中需要传递变参,考虑使用 dynamic 还是 Dictionary(准确地说是Dictionary<string,object>).dynamic 的编码体验显著优于 Diction ...

  8. TexBox的属性

    允许多行输入

  9. 【leetcode】Binary Search Tree Iterator

    Binary Search Tree Iterator Implement an iterator over a binary search tree (BST). Your iterator wil ...

  10. 20. 最长公共子串(ToDo)[LCS]

    [参考] http://zhedahht.blog.163.com/blog/static/254111742007376431815/