mysql 查询重复记录及优化处理

分类:mysql

 数据库中有个大表,需要查找其中的名字有重复的记录id,以便比较。 

如果仅仅是查找数据库中name不重复的字段,很容易 
SELECT min(`id`),`name` FROM `table` GROUP BY `name`;
 
但是这样并不能得到说有重复字段的id值。(只得到了最小的一个id值) 查询哪些字段是重复的也容易 
SELECT `name`,count(`name`) as count FROM `table` GROUP BY `name` HAVING count(`name`) >1 ORDER BY count DESC;
 
但是要一次查询到重复字段的id值,就必须使用子查询了,于是使用下面的语句。 
SELECT `id`,`name` FROM `table` WHERE `name` in ( SELECT `name` FROM `table` GROUP BY `name` HAVING count(`name`) >1 ); 
 
但是这条语句在mysql中效率太差,感觉mysql并没有为子查询生成零时表。 于是使用先建立零时表 
create table `tmptable` as ( SELECT `name` FROM `table` GROUP BY `name` HAVING count(`name`) >1 ); 
 
然后使用多表连接查询 
SELECT a.`id`, a.`name` FROM `table` a, `tmptable` t WHERE a.`name` = t.`name`; 
 
结果这次结果很快就出来了。
本文链接: mysql 查询重复记录及优化处理
版权所有:布士收藏夹在网络收集,如有侵犯你的权利, 请联系QQ:641868752。

评论

发表评论

*

* (显示gravatar头像)

Ctrl+Enter快捷回复

© 2014 布士收藏夹 all rights reserved.