删除表中重复记录的办法
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最小的。
删之。呵呵。
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最小的。
删之。呵呵。
相关文章推荐
- 删除千万级表中重复记录的办法
- 删除重复记录的办法
- 删除mysql重复记录的办法
- 删除千万级表中重复记录的办法
- oracle中删除表中重复记录常见办法
- 删除千万级表中重复记录的办法
- 删除mysql重复记录的办法
- 删除mysql重复记录的办法
- 删除表中重复记录
- oracle删除重复记录保留一条记录
- Oracle查询重复数据与删除重复记录方法
- MySQL查询及删除重复记录的方法
- sql查询重复记录、删除重复记录方法大全
- 查询及删除重复记录的SQL语句
- DataGrid中删除最后一页的记录时出错的解决办法!
- 删除表中重复记录
- 删除数据库中重复记录
- rowid 删除重复记录
- 如何查找和删除重复记录
- 在SQL Server中快速删除重复记录