大家好,兄弟有一个关于相同记录的筛选的问题,请大家帮忙!(100分)

  • 主题发起人 主题发起人 darhe
  • 开始时间 开始时间
D

darhe

Unregistered / Unconfirmed
GUEST, unregistred user!
我有一个表book_info,是存放图书目录的,里面有9万多条记录,但里面有很好重复的记录,我想把这个重复的记录查出来,但系统对这些重复的记录不做处理,把这些记录找出来,让操作员处理,由操作员决定是删除里面记录,还是把相同记录中的一个或多个记录修改成别的图书,有那位仁兄愿意帮忙,谢谢!
 
select * from table_name <br>where <br>group by key_feild<br>having count(key_field)&gt;=2<br>使用此类语句可以得到重复的纪录,显示在界面上,任由用户处理
 
给出判断为重复的条件(即你你判定这条记录是重复记录的依据),用SQL命令能很快搞定
 
lmax的方法是对的,简单实用。
 
有现成的单个Key_feild 可能性很小.若有当初就会不允许重复,毕竟图书目录不是频繁写入的表,最大可能性是,有不重复的index ,但大量重复的同一书籍名,甚至书记名虽不完全一样,但实际是一本书.
 
方法一<br>declare @max integer,@id integer<br>declare cur_rows cursor local for select 主字段,count(*) from 表名 group by 主字段 having count(*) &gt; 1<br>open cur_rows<br>fetch cur_rows into @id,@max<br>while @@fetch_status=0<br>begin<br>select @max = @max -1<br>set rowcount @max<br>delete from 表名 where 主字段 = @id<br>fetch cur_rows into @id,@max<br>end<br>close cur_rows<br>set rowcount 0<br>方法二<br>有两个意义上的重复记录,一是完全重复的记录,也即所有字段均重复的记录,二是部分关键字段重复的记录,比如Name字段重复,而其他字段不一定重复或都重复可以忽略。<br>1、对于第一种重复,比较容易解决,使用<br> &nbsp; &nbsp;select distinct * from tableName<br>就可以得到无重复记录的结果集。<br>如果该表需要删除重复的记录(重复记录保留1条),可以按以下方法删除<br> &nbsp; &nbsp;select distinct * into #Tmp from tableName<br> &nbsp; &nbsp;drop table tableName<br> &nbsp; &nbsp;select * into tableName from #Tmp<br> &nbsp; &nbsp;drop table #Tmp<br>发生这种重复的原因是表设计不周产生的,增加唯一索引列即可解决。<br>2、这类重复问题通常要求保留重复记录中的第一条记录,操作方法如下<br> &nbsp; &nbsp;假设有重复的字段为Name,Address,要求得到这两个字段唯一的结果集<br> &nbsp; &nbsp;select identity(int,1,1) as autoID, * into #Tmp from tableName<br> &nbsp; &nbsp;select min(autoID) as autoID into #Tmp2 from #Tmp group by Name,autoID<br> &nbsp; &nbsp;select * from #Tmp where autoID in(select autoID from #tmp2)<br> &nbsp; &nbsp;最后一个select即得到了Name,Address不重复的结果集(但多了一个autoID字段,实际写时可以写在select子句中省去此列)<br><br>select 字段 <br>from 表 <br>group by 字段 <br>having count(字段)&gt;1 <br><br>补充问题,如果判断A表中数据不在B表的对比条件在一个或一个以上,用left join <br><br>写个例子 <br>insert into B(字段...) <br>select a.字段... <br>from a left join b <br>on a.字段1=b.字段1 and a.字段2=b.字段2 .... <br>where b.字段1 is null
 
支持lmax的做法<br>select &nbsp;key_feild from table_name <br>group by key_feild<br>having count(*)&gt;=2
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部