您的位置:首页 > 其它

删除表中重复记录的办法

2009-01-07 11:11 155 查看
例如表 table

id name,age
1 menes 20
2 sky 25
3 menes 20

首先 简单说下group by

如果一个select语句中使用了group by 例如 select name,age from table group by name,age
执行此查询后如果name,age的组合不是只有一条,将只返回相同记录中的第一条记录。
那么,上述select语句(select name,age from table group by name,age)返回的是表table中name,age的组合不重复的所有记

录。也就是如下记录

name age
menes 20
sky 25

那么select min(id) from table group by name,age返回的是什么样的记录呢?

显而易见是表table中name,age的组合不重复的,如果有重复的,则取对应的id字段最小的所有记录的id。即:

1
2

这样,就得到了删除表中重复记录的sql语句

delete from table where id not in(select min(id) from table group by name,age);

意思是删除table中id 字段 不属于 name,age组合唯一的,也不属于 不唯一记录中id字段最小的 记录。

解释:不属于name,age组合中唯一的,也不属于不唯一记录中id字段最小的,那会是什么?肯定是重复的,且不是id最小的。
删之。呵呵。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: