当前位置:  数据库>sqlserver

删除数据库中重复数据的几个方法

    来源: 互联网  发布时间:2014-09-05

    本文导语:  方法一 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 de...

方法一

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、这类重复问题通常要求保留重复记录中的第一条记录,操作方法如下:

假设有重复的字段为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子句中省去此列)

    
 
 

您可能感兴趣的文章:

  • 删除数据库中重复记录方法介绍及代码参考
  • sql server 删除表1某些数据的同时自动删除表2的相关数据的sql代码
  • sql server 2005删除用户时“数据库主体在该数据库中拥有架构,无法删除”错误的解决办法
  • linux 变量内容删除 中有关“最短数据删除”的意思
  • 删除mysql数据库中的重复数据记录
  • 我在table中选中一行删除后,数据库中是删除了,但我的table中这一行还显示,我怎么让他不显示??
  • SQLServer用t-sql命令批量删除数据库中指定表(游标循环删除)
  • 用PreparedStatement ps 在数据库中插入记录,但还未提交事务,此时再用Delete语句为什么删除不了用 ps刚才插入的记录,如何可以删除未这
  • 每次运行时,将针对该用户的数据放在临时表如-temTableA中,用完之后删除数据,安全上有问题吗?
  • SQL建立数据库及删除数据库命令
  • oracle数据库删除数据Delete语句和Truncate语句的使用比较
  • 想问下如果删除协议栈直接从网卡中读取数据是什么数据呢??
  • Sql Server 2000删除数据库备份文件
  • 如何在Linux的shell中先删除数据库再创建数据库
  • 如何强制删除或恢复SQLServer正在使用的数据库
  • MSSQL 删除数据库里某个用户所有表里的数据
  • 一个数据库删除的问题,急急急
  • MySQL防止delete命令删除数据的两种方法
  • ThinkPHP实现批量删除数据的代码实例
  • linux使用mysql删除数据库的问题,谢谢!
  • MYSQL删除表中的指定ID数据
  • 我不小心用mysqlfront把一个mysql数据库删除了,能不能恢复(没有备份),大家一定要救我阿。
  • php批量删除数据库下指定前缀的表以prefix_为例
  • oracle数据库添加或删除一列的sql语句
  • 使用php批量删除数据库下所有前缀为prefix_的表
  • 如何在一个页面关闭之前将数据库中相应信息删除?
  • mysql数据库中的information_schema和mysql可以删除吗?
  • 插入数据库行删除不行哪位给解释一下
  • 彻底删除Oracle数据库的方法
  • ejb2.0的cmp里如何更新,删除数据库里的记录
  • 谁有使用EJB的对数据库中一张表,增,删除,改的程序?
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • C++ Maps 成员 erase():删除一个元素
  • 怎么实现,动态的增加和删除input,删除时用radiobox选中,然后点删除,即可。谢谢
  • C++ MultiMaps 成员 erase():删除元素
  • 100分相送,怎么实现,动态的增加和删除input,删除时用radiobox选中,然后点删除,即可
  • C++ Double Ended Queues(双向队列) 成员 erase():删除一个元素
  • 请问:linux中的软件包安装后,怎么删除呀,直接删除吗?
  • C++ Lists(链表) 成员 erase():删除一个元素
  • jquery删除提示框(弹出是否删除对话框)
  • C++ Lists(链表) 成员 remove():从list删除元素
  • vim删除命令"d3e"为什么删除单词的数目不一致?
  • C++ Lists(链表) 成员 unique():删除list中重复的元素
  • 如何删除前面有个-的文件,我的根目录下有个文件叫 -C,请问如何删除?
  • C++ Lists(链表) 成员 pop_front():删除第一个元素
  • jquery删除提示框弹出是否删除对话框
  • C++ Priority Queues(优先队列) 成员 pop():删除第一个元素
  • GRUB的删除与逻辑驱动器存在时扩展分区的删除
  • C++ Queues(队列) 成员 pop():删除第一个元素
  • fedora 删除软件,但是不删除依赖软件
  • C++ MultiMaps 成员 clear():删除所有元素
  • Oracle删除表前判断表名是否存在若存在则删除
  • C++ Lists(链表) 成员 clear():删除所有元素
  • Linux 删除命令关于删除系统打不出的乱码文件名


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3