Home > Database > Mysql Tutorial > MySQL大表中重复字段的查询效率方法_MySQL

MySQL大表中重复字段的查询效率方法_MySQL

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Release: 2016-06-01 13:47:22
Original
908 people have browsed it

bitsCN.com

  MySQL大表重复字段应该如何查询到呢?这是很多人都遇到的问题,下面就教您一个MySQL大表重复字段的查询方法,供您参考。

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

  如果仅仅是查找数据库中name不重复的字段,很容易

 

<ol class="dp-sql">
<li class="alt">SELECT min(`id`),`name`     </li>
<li>FROM `table`     </li>
<li class="alt">GROUP BY `name`;   </li>
</ol>
Copy after login

  但是这样并不能得到说有重复字段的id值。(只得到了最小的一个id值)

  查询哪些字段是重复的也容易

 

<ol class="dp-xml">
<li class="alt">SELECT `name`,count(`name`) as count     </li>
<li>FROM `table`     </li>
<li class="alt">GROUP BY `name` HAVING count(`name`) >1     </li>
<li>ORDER BY count DESC;   </li>
</ol>
Copy after login

  但是要一次查询到重复字段的id值,就必须使用子查询了,于是使用下面的语句来实现MySQL大表重复字段查询。

 

<ol class="dp-xml">
<li class="alt">SELECT `id`,`name`     </li>
<li>FROM `table`     </li>
<li class="alt">WHERE `name` in (     </li>
<li>   SELECT `name`     </li>
<li class="alt">   FROM `table`     </li>
<li>   GROUP BY `name` HAVING count(`name`) >1    </li>
<li class="alt">);  </li>
</ol>
Copy after login

  但是这条语句在mysql中效率太差,感觉mysql并没有为子查询生成临时表。

  于是使用先建立临时表

 

<ol class="dp-xml">
<li class="alt">create table `tmptable` as (    </li>
<li>   SELECT `name`     </li>
<li class="alt">   FROM `table`     </li>
<li>   GROUP BY `name` HAVING count(`name`) >1    </li>
<li class="alt">);  </li>
</ol>
Copy after login

  然后使用多表连接查询

 

<ol class="dp-xml">
<li class="alt">SELECT a.`id`, a.`name`     </li>
<li>FROM `table` a, `tmptable` t     </li>
<li class="alt">WHERE a.`name` = t.`name`;   </li>
</ol>
Copy after login

  结果这次结果很快就出来了。

  用 distinct去重复

 

<ol class="dp-xml">
<li class="alt">SELECT distinct a.`id`, a.`name`     </li>
<li>FROM `table` a, `tmptable` t     </li>
<li class="alt">WHERE a.`name` = t.`name`;   </li>
</ol>
Copy after login

 

bitsCN.com
Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template