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

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

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