【原创】处理冗余记录解决方案1:查询某些字段重复的SQL

表   table1
字段 id,name,time,column,commnet
记录 1,aaa,111,03,xyz
记录 2,bbb,231,01,xyz
记录 3,aaa,111,03,xyz
记录 4,aaa,111,03,xyz
记录 5,aaa,111,03,xyz
记录 6,aaa,111,03,xyz
记录 7,ccc,111,03,xyz
发现记录1、3、4、5、6是冗余记录
最近发现库中某表有很多这样的冗余记录(比上面例子更严重的情况。恩,1万多条冗余记录-.-')
领导急了!
怎么办?
来,让我们冷静的想一想......
首先,现在我们要查出所有这些捣蛋鬼——冗余记录!

行动起来!先写SQL吧,可能很多朋友立即想到distinct
在此说明一下distinct,他返回的是对象中唯一的记录(如果有表中存在自增字段,那么select distinct * from table与select * from table返回的结果是相同的),而我们需要查询的是出现次数超过1的记录。
我们先要用到having而不是distinct。(至于distinct,后面我们肯定也会用到)
SQL:

 1select  
 2tmp.prgname,--会出现重复的字段
 3tmp.playtime,--会出现重复的字段
 4a.prgid,--自增标识字段
 5a.prgcolumn,--会出现重复的字段
 6a.prgcomment --会出现重复的字段
 7from ax_program a 
 8left join 
 9Select   
10  prgname,
11  playtime,
12  prgcolumn  
13  From   ax_program  
14  group   by  prgname,playtime,prgcolumn       
15having   count(*)>1 ) --加入出现超过1次的限制
16tmp
17on 
18a.prgname=tmp.prgname and a.playtime=tmp.playtime 
19where tmp.prgname is not  null--筛选掉无用记录
20 group by   tmp.prgname,tmp.playtime,a.prgcolumn ,a.prgid,a.prgcomment 
21order by tmp.prgname,tmp.playtime
注:select中出现prgid字段纯粹是为了传给程序需要的DataSet作为DataGrid的DataKeyFild用
posted @ 2007-12-05 13:51  LutzMark  阅读(582)  评论(0编辑  收藏  举报