利用SQL05特性删除表中重复数据计算机等级考试
文章作者 100test 发表时间 2010:01:01 08:50:15
来源 100Test.Com百考试题网
问题:一个表有自增的ID列,表中有一些记录内容重复,也就是说这些记录除了ID不同之外,其他的信息都相同。需要把重复的记录保留一条,剩下的删除。
这种需求一般开发人员都会,我这里写出两个版本。
版本一:由于记录有自增列,所以自增列可以做为记录的唯一标识,由此可见,重复的记录的自增ID是一个递增关系,这里我们可以只保留ID最小的那条记录,其它的全部删除。利用一个嵌套语句就非常容易写出下面的SQL。其中的sname,saddress是记录除了ID外的所有列。
DELETE FROM a
WHERE id NOT IN ( SELECT MIN(id)
FROM a
GROUP BY sname,
saddress )
版本二:充分利用SQL05的几个比较实用的特性。这里先简单说说要用到的几个特性。详细用法可到网上搜索下。
1:ROW_NUMBER,它的作用就是用来生成行号,默认是从1开始。
2:公用表表达式(CTE),我这里并不会利用它的递归,而是用它来简化嵌套查询及对表自身引用功能。CTE的语法如下:
[ WITH