读书人

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

发布时间: 2012-08-08 14:32:45 作者: rapoo

SQL中删除重复记录的N种方法
最近温习了一下如何在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

后续如有更好的例子,继续添加.........

读书人网 >SQL Server

热点推荐