免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: tigerfish
打印 上一主题 下一主题

求删除重复记录的sql语句? [复制链接]

论坛徽章:
0
31 [报告]
发表于 2003-10-20 13:03 |只看该作者

什么问题?还是精华

求删除重复记录的sql语句?
怎样把具有相同字段的纪录删除,只留下一条。
例如,表test里有id,name字段
如果有name相同的记录 只留下一条,其余的删除。
name的内容不定,相同的记录数不定。
有没有这样的sql语句?

这题很难吗?怎么放这么长时间不结贴?还没解决吗?
其实连发贴人意图没明白的话怎么去做?

如果他的意思是不管id,只要保留一条name相同的记录
可以用下面的语句
select distinct a.name ,(select top 1 id from test  b where a.name=b.name ) as id  into aaa  from test  a
然后delete test
再将生成的aaa导入test表,然后删除aaa表(drop aaa)

论坛徽章:
0
32 [报告]
发表于 2003-10-20 13:22 |只看该作者

Re: 什么问题?还是精华

最初由 西方大败 发布
[B]求删除重复记录的sql语句?
怎样把具有相同字段的纪录删除,只留下一条。
例如,表test里有id,name字段
如果有name相同的记录 只留下一条,其余的删除。
name的内容不定,相同的记录数不定。
有没有这样的sql语句?

这题很难吗?怎么放这么长时间不结贴?还没解决吗?
其实连发贴人意图没明白的话怎么去做?

如果他的意思是不管id,只要保留一条name相同的记录
可以用下面的语句
select distinct a.name ,(select top 1 id from test  b where a.name=b.name ) as id  into aaa  from test  a
然后delete test
再将生成的aaa导入test表,然后删除aaa表(drop aaa) [/B]


呵呵,你老花了。你的答案magicangel早给了。

后面讨论的问题已超越帖子本身的内涵,你没看懂?

论坛徽章:
0
33 [报告]
发表于 2003-10-20 14:19 |只看该作者
我比较赞同magicangel的办法。xzh2000使用的select @max = @max -1
set rowcount @max 这一个语句我觉得妙。我以前用的是其他方法删除重复记录比较麻烦。

论坛徽章:
0
34 [报告]
发表于 2003-10-20 14:22 |只看该作者
如果两条记录完全相同我觉得也可以这样做:
select distinct * into  aaaa from test

论坛徽章:
0
35 [报告]
发表于 2003-10-20 14:32 |只看该作者
最初由 guomulin 发布
[B]如果两条记录完全相同我觉得也可以这样做:
select distinct * into  aaaa from test [/B]


这是理想状态哦

论坛徽章:
0
36 [报告]
发表于 2003-10-22 15:07 |只看该作者

眼还没花~~

最初由 tempus 发布
[B]

呵呵,你老花了。你的答案magicangel早给了。

后面讨论的问题已超越帖子本身的内涵,你没看懂? [/B]


最初由 magicangel 发布
[B]首先将test表备份
select distinct[/COLOR] id,name into #tmp from test --取test表里id,name不重复的纪录到临时表#tmp里
delete test --清空test里的纪录
insert test(id,name)
select id,name from #tmp --将#tmp里id,name唯一的纪录写入test表 [/B]


他的回复我看了,不过他的结果跟我的结果不同.
比如: test
id   name
1         aa               
2         aa        
3         aa        
1         aa               
2         aa               
2         bb               
3         bb               
4         cc        
4         cc      
他的结果是:  
1         aa               
2         aa               
2         bb               
3         aa               
3         bb               
4         cc      
我的结果是:
1          aa        
2          bb        
4          cc        
             
不知道是那种是所要的

论坛徽章:
0
37 [报告]
发表于 2003-10-23 10:55 |只看该作者

Re: 什么问题?还是精华

最初由 西方大败 发布
[B]求删除重复记录的sql语句?
怎样把具有相同字段的纪录删除,只留下一条。
例如,表test里有id,name字段
如果有name相同的记录 只留下一条,其余的删除。
name的内容不定,相同的记录数不定。
有没有这样的sql语句?

这题很难吗?怎么放这么长时间不结贴?还没解决吗?
其实连发贴人意图没明白的话怎么去做?

如果他的意思是不管id,只要保留一条name相同的记录
可以用下面的语句
select distinct a.name ,(select top 1 id from test  b where a.name=b.name ) as id  into aaa  from test  a
然后delete test
再将生成的aaa导入test表,然后删除aaa表(drop aaa) [/B]


你是切合题意的。不过,我想如果楼主所理解的是这样的话,好像没有什么实际意义,不如select distinct name,count(id) from test group by name来得实用,要id这个字段有什么用,冗余。

论坛徽章:
0
38 [报告]
发表于 2003-10-27 11:37 |只看该作者

为什么不在Insert 的时候作判断?

为什么没有想过在插入的时候作Check使name不重复.那样不是更好吗?

论坛徽章:
0
39 [报告]
发表于 2003-10-28 17:15 |只看该作者

羡慕

你们学多久SQL了,好羡慕。

论坛徽章:
0
40 [报告]
发表于 2003-10-31 09:46 |只看该作者
我不知道ID是不是主键,如果不是,建立一个主键。假设是MyID。可以用下面的一句SQL删除,实践中我经常这样用,效果还不错。
delete from table where MyID = (
select MyID from table t1 , table t2 where t1.name = t2.name and t1.MyID > t2.MyID )
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP