MySQL大表重復(fù)字段的查詢(xún)方法
MySQL大表重復(fù)字段應(yīng)該如何查詢(xún)到呢?這是很多人都遇到的問(wèn)題,下面就教您一個(gè)MySQL大表重復(fù)字段的查詢(xún)方法,供您參考。
數(shù)據(jù)庫(kù)中有個(gè)大表,需要查找其中的名字有重復(fù)的記錄id,以便比較。
如果僅僅是查找數(shù)據(jù)庫(kù)中name不重復(fù)的字段,很容易
- SELECT min(`id`),`name`
 - FROM `table`
 - GROUP BY `name`;
 
但是這樣并不能得到說(shuō)有重復(fù)字段的id值。(只得到了最小的一個(gè)id值)
查詢(xún)哪些字段是重復(fù)的也容易
- SELECT `name`,count(`name`) as count
 - FROM `table`
 - GROUP BY `name` HAVING count(`name`) >1
 - ORDER BY count DESC;
 
但是要一次查詢(xún)到重復(fù)字段的id值,就必須使用子查詢(xún)了,于是使用下面的語(yǔ)句來(lái)實(shí)現(xiàn)MySQL大表重復(fù)字段查詢(xún)。
- SELECT `id`,`name`
 - FROM `table`
 - WHERE `name` in (
 - SELECT `name`
 - FROM `table`
 - GROUP BY `name` HAVING count(`name`) >1
 - );
 
但是這條語(yǔ)句在mysql中效率太差,感覺(jué)mysql并沒(méi)有為子查詢(xún)生成零時(shí)表。
于是使用先建立零時(shí)表
- create table `tmptable` as (
 - SELECT `name`
 - FROM `table`
 - GROUP BY `name` HAVING count(`name`) >1
 - );
 
然后使用多表連接查詢(xún)
- SELECT a.`id`, a.`name`
 - FROM `table` a, `tmptable` t
 - WHERE a.`name` = t.`name`;
 
結(jié)果這次結(jié)果很快就出來(lái)了。
用 distinct去重復(fù)
- SELECT distinct a.`id`, a.`name`
 - FROM `table` a, `tmptable` t
 - WHERE a.`name` = t.`name`;
 
【編輯推薦】
MySQL隨機(jī)查詢(xún)的實(shí)現(xiàn)方法















 
 
 

 
 
 
 