您的位置:首页 > 数据库

实例介绍删除数据库中重复数据的几个方法

2009-09-24 22:46 344 查看

实例介绍删除数据库中重复数据的两个方法:

  第一个方法:

  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.这类重复问题一般要求保留重复记录中的第1条记录,假设有重复的字段为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子句中省去此列)

 实例介绍删除数据库中重复数据的两个方法:

  第一个方法:

  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
<!--
var aid = 9193460;
var channelid = 20392;
var tagname = "";
//-->
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: