CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
IBM Rational 系统开发最佳实践工具包 WebSphere MQ 最佳实践 TOP 15
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  基础类

删除表中重复的行

楼主mjtalhx(执着狂)2006-03-16 20:20:44 在 MS-SQL Server / 基础类 提问

各位大虾:谁能给出删除表中重复行的代码!万分感谢!注明:不能用distinct 问题点数:20、回复次数:3Top

1 楼weigm(北斗)回复于 2006-03-16 20:45:06 得分 10

删除重复数据  
  一、具有主键的情况  
  a.具有唯一性的字段id(为唯一主键)  
  delect   table    
  where   id   not   in    
  (  
  select   max(id)   from   table   group   by   col1,col2,col3...  
  )  
  group   by   子句后跟的字段就是你用来判断重复的条件,如只有col1,  
  那么只要col1字段内容相同即表示记录相同。  
  b.具有联合主键  
  假设col1+','+col2+','...col5   为联合主键  
  select   *   from     table   where   col1+','+col2+','...col5   in   (  
      select   max(col1+','+col2+','...col5)   from   table    
  where   having   count(*)>1  
  group   by   col1,col2,col3,col4    
  )  
  group   by   子句后跟的字段就是你用来判断重复的条件,  
  如只有col1,那么只要col1字段内容相同即表示记录相同。  
  or  
  select   *   from   table     where   exists   (select   1   from   table   x   where   table.col1   =   x.col1   and    
  table.col2=   x.col2   group   by   x.col1,x.col2   having   count(*)   >1)  
  c:判断所有的字段  
      select   *   into   #aa   from   table   group   by   id1,id2,....  
      delete   table    
      insert   into   table    
      select   *   from   #aa  
  二、没有主键的情况  
  a:用临时表实现  
  select   identity(int,1,1)   as   id,*   into   #temp   from   ta  
  delect   #temp    
  where   id   not   in    
  (  
      select   max(id)   from   #   group   by   col1,col2,col3...  
  )  
  delete   table   ta  
  inset   into   ta(...)  
        select   .....   from   #temp  
  b:用改变表结构(加一个唯一字段)来实现  
  alter   table   表   add     newfield   int   identity(1,1)  
  delete   表  
  where   newfield   not   inTop

2 楼zhenmeiyisi(。。。)回复于 2006-03-16 20:52:48 得分 5

完全相同    
   
  SELECT   id,   sm  
  INTO   TEMP  
  FROM   sqlx  
  GROUP   BY   id,   smTop

3 楼ReViSion(和尚)回复于 2006-03-16 21:24:31 得分 5

我想楼主肯定是数据库中没主键吧,要不也写不进去呀  
  ------------------------------------------------  
  好像没有什么更好的办法,用distinct可能还会快点Top

相关问题

  • 求助删除表中重复记录
  • 怎样删除重复的行(mssql)
  • 如何删除重复的行
  • 删除重复的字符串行
  • 请问怎么用触发器删除表中完全重复的记录行,只留一行?
  • 求删除表中重复记录的sql语句!!!
  • 请问在delphi中如何将表中重复记录删除???
  • +++++++ 如何在一个表中删除重复的项?+++++++
  • 怎样删除一个表中的重复数据。
  • 如何删除表中的重复记录?

关键词

  • 字段
  • col
  • 删除
  • 表
  • 重复
  • 主键
  • 相同
  • 判断
  • group
  • table

得分解答快速导航

  • 帖主:mjtalhx
  • weigm
  • zhenmeiyisi
  • ReViSion

相关链接

  • SQL Server类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo