会员登录 用户名: 密码: 登录 新会员注册 [找回密码]
当前位置:编程论坛 >> 数据库技术专区 >> SQL Server 论坛 >> [求助]SQL中如何删除重复的某一行? - SQL Server 论坛
首页
中资源
  发表一个新主题  发表一个新投票  回复主题 您是本帖的第 254 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
 * 贴子主题:[求助]SQL中如何删除重复的某一行? 悬赏分50 [已结帖] 报告本帖给版主  显示可打印的版本  把本贴打包邮递  把本贴加入论坛收藏夹  发送本页面给朋友  把本贴加入IE收藏夹 
 fuhong 帅哥哟,离线,有人找我吗?
  
  
  头 衔:╰*★.oо泪
  等 级:初出江湖
  积 分:238
  专家分:0
  提问帖:2/2
  回答帖:3
  总帖数:15
  经验值:89
  注 册:2008-9-23
给fuhong发送一个短消息 把fuhong加入好友 查看fuhong的个人资料 搜索fuhong在SQL Server 论坛的所有贴子  引用回复这个贴子 回复这个贴子楼主

发贴心情 [求助]SQL中如何删除重复的某一行?

SQL中删除重复的某一行命令是什么啊??请教!
   
   比如有这样一个表CJ
name       subject      result
李四       语文       85
张三       语文       80
张三       数学       90
张三       物理       85
李四       语文       85
李四       数学       92
李四       物理       82
张三       语文       80
张三       数学       90
张三       物理       85
李四       语文       85
李四       数学       92
李四       物理       82

如果我决定成功 没有人可以使我失败!

发帖:2008-11-20 13:17:00
  鲜花(0)  鸡蛋(0)
 财神 帅哥哟,离线,有人找我吗?
  
  
  等 级:中级剑客
  积 分:15063
  专家分:11350
  提问帖:3/4
  回答帖:835
  总帖数:1227
  经验值:1355
  注 册:2006-11-18
给财神发送一个短消息 把财神加入好友 查看财神的个人资料 搜索财神在SQL Server 论坛的所有贴子 引用回复这个贴子 回复这个贴子2

发贴心情 

数据库的使用过程中由于程序方面的问题有时候会碰到重复数据,重复数据导致了数据库部分设置不能正确设置……
方法一

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子句中省去此列)


按此在新窗口浏览图片

发帖:2008-11-20 19:10:00
 fuhong 帅哥哟,离线,有人找我吗?
  
  
  头 衔:╰*★.oо泪
  等 级:初出江湖
  积 分:238
  专家分:0
  提问帖:2/2
  回答帖:3
  总帖数:15
  经验值:89
  注 册:2008-9-23
给fuhong发送一个短消息 把fuhong加入好友 查看fuhong的个人资料 搜索fuhong在SQL Server 论坛的所有贴子  引用回复这个贴子 回复这个贴子3

发贴心情 

谢谢!又学到一点!

如果我决定成功 没有人可以使我失败!

发帖:2008-11-21 9:29:00
 nannansun 帅哥哟,离线,有人找我吗?天蝎座1986-11-13
  
  
  等 级:初出江湖
  积 分:128
  专家分:10
  提问帖:4/4
  回答帖:15
  总帖数:50
  经验值:151
  注 册:2008-10-16
给nannansun发送一个短消息 把nannansun加入好友 查看nannansun的个人资料 搜索nannansun在SQL Server 论坛的所有贴子  引用回复这个贴子 回复这个贴子4

发贴心情 

lz 这样的情况没遇到,不过看到上面的知识 学到了不少东西


其实 lz 可以在这个表中加个id列   然后设置成primary key (主键)

 这样就不会重复了, 因为主键定义了一个(唯一而且非空)

  然后可以在名字的字段上 加个唯一的约束(unique)

  alter table 表名称 add constraint 约束名称 unique(ename)

   意思就是说 给ename列加了个唯一的约束,这样在以后的录入数据的时候 就不会重复数据了。



每迗進埗①尛嚸  ⑩哖苡逅僦哙進埗佷①嚸

葙信這條 准莈諎

呮崾伱堅持  伱僦哙晟功

发帖:2008-11-25 11:36:00

本主题贴数4,分页:[返回帖子列表] [上一页] [1] [下一页]

此主题已经结帖:

财神-50

 *快速回复:[求助]SQL中如何删除重复的某一行?  [ 回帖是一种美德 :) ]
会员账号 用户名    还没注册?    密码    忘记密码?
内容
  • HTML标签: 不可用
  • UBB标签: 可用
  • 贴图标签: 可用
  • 多媒体标签:可用
  • 表情字符转换:可用
  • 上传图片:不可用
  • 最多15KB
  • 点击表情图即可在帖子中加入相应的表情
                                
    邮件回复 显示签名   [Ctrl+Enter直接提交贴子]

    管理选项锁定 | 解锁 | 提升 | 删除 | 移动 | 固顶 | 总固顶 | 奖励 | 惩罚 | 发布公告