处理冗余记录解决方案

本文探讨了如何处理数据库中的冗余记录问题。通过SQL查询找出重复数据,并提出不应直接删除,而应保留至少一条记录。文章介绍了使用having子句而非distinct来定位重复记录,并建议在存储过程中实现解决方案,包括创建临时表和视图。
摘要由CSDN通过智能技术生成

表   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:

 1 select   
 2 tmp.prgname, -- 会出现重复的字段
 3 tmp.playtime, -- 会出现重复的字段
 4 a.prgid, -- 自增标识字段
 5 a.prgcolumn, -- 会出现重复的字段
 6 a.prgcomment  -- 会出现重复的字段
 7 from  ax_program a 
 8 left   join  
 9 Select    
10   prgname,
11   playtime,
12   prgcolumn  
13    From    ax_program  
14    group     by   prgname,playtime,prgcolumn       
15 having     count ( * ) > 1  )  -- 加入出现超过1次的限制
16 tmp
17 on  
18 a.prgname = tmp.prgname  and  a.playtime = tmp.playtime 
19 where  tmp.prgname  is   not    null -- 筛选掉无用记录
20   group   by    tmp.prgname,tmp.playtime,a.prgcolumn ,a.prgid,a.prgcomment 
21 order   by  tmp.prgname,tmp.playtime

注:select中出现prgid字段纯粹是为了传给程序需要的DataSet作为DataGrid的DataKeyFild用 

现在有了查找所有重复记录的SQL,接下来怎么做?
直接删除他们么?
不!那样连想要的记录也一起删掉了,至少要分别保留一条记录!
一条SQL语句恐怕达不到目的。恩,现在需要临时表,然后可以用视图,最好还是写在存储过程里

 1 SET  QUOTED_IDENTIFIER  ON  
 2 GO
 3
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值