2009年7月17日
在有些时候,需要删除表中某一个字段有重复数据的行,如下表(TLB_STUDENT):
id name age class
1 zlxia 24 class1
2 dodo 25 class1
3 name3 24 class2
4 name4 25 class2
5 name5 24 class3
6 name6 25 class3
现在比如需要每个班级保留一条数据,就是说包class字段重复的数据删掉,只保留一条就行,例子不太好,没用实际用处,只是为了简单描述,但是实际工作中可能会有类似的需求,希望能给你一点帮助。
注:下面的id字段对应于表中的主键。如果表中的主键为Key, 则下面将id换成Key, 这里的min函数只是为了取出分组之后的每组中的一条数据,也可以换成max等函数。如果有更加特殊的需求,比如每个分组中的前n条数据,并且排序是有特殊规则的,比如按分数排名,则需要用row_number函数了。
delete
FROM TLB_STUDENT--表名
WHERE (Id not in(
(SELECT MIN(Id) as id
FROM TLB_STUDENT--表名
GROUP BY CLASS--需要处理的字段名称
)))
结果:
id name age class
1 zlxia 24 class1
3 name3 24 class2
5 name5 24 class3
第一次发贴,欢迎大家指教!