SQL中删除重复记录的N种方法

[size=large] 最近温习了一下如何在SQL中删除复生记录,感觉挺有趣。现将自己总结的几条方法归纳如下:

“重复记录”有两种意义,一种是表中的所有记录完全复复,(即表中的字段均重复),一种是表中的个别字段重复

1,对第一种重复,比较好解决

SELECT DISTINCT * FROM TABLENAME

可以复到无重复的记录

如果要删除多余的重复记录(只保留重复记录的一条记录),可以按下列方法操作

SELECT DISTINCT * INTO #TEMP FROM TABLENAME

DROP TABLE TABLENAME

SELECT * INTO TABLENAME FROM #TEMP

DROP TABLE #TEMP

出现这种问题是因为表的设计不周完,增加唯一性索引即可

2,个别字段的重复,如下

ID NAME VALUE
1 A PP
2 A PP
3 B II
4 B PP
5 B PP
6 C PP
7 C PP
8 C II
想要得到这样的结果
ID NAME VALUE
1 A PP
3 B II
4 B PP
6 C PP
8 C II
方法1
DELETE TABLENAME WHERE ID NOT IN
(SELECT MAX(ID) FROM TABLENAME GROUP BY NAME,VALUE HAVING COUNT(*)>1)
方法2
DELETE A FROM TABLENAME A LEFT JOIN
(SELECT ID=MIN(ID) FROM TABLENAME GROUP BY NAME,VALUE ) B ON A.ID=B.ID WHERE B.ID IS NULL

后续如有更好的例子,继续添加.........[/size]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值