MySQL大表中重復(fù)字段的高效率查詢方法
更新時間:2012年12月21日 10:34:45 作者:
MySQL大表重復(fù)字段應(yīng)該如何查詢到呢?這是很多人都遇到的問題,下面就教您一個MySQL大表重復(fù)字段的查詢方法,供您參考
MySQL大表重復(fù)字段應(yīng)該如何查詢到呢?這是很多人都遇到的問題,下面就教您一個MySQL大表重復(fù)字段的查詢方法,供您參考。
SELECT min(`id`),`name`
FROM `table`
GROUP BY `name`;
但是這樣并不能得到說有重復(fù)字段的id值。(只得到了最小的一個id值)
查詢哪些字段是重復(fù)的也容易
SELECT `name`,count(`name`) as count
FROM `table`
GROUP BY `name` HAVING count(`name`) >1
ORDER BY count DESC;
但是要一次查詢到重復(fù)字段的id值,就必須使用子查詢了,于是使用下面的語句來實現(xiàn)MySQL大表重復(fù)字段查詢。
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`;
結(jié)果這次結(jié)果很快就出來了。
用 distinct去重復(fù)
SELECT distinct a.`id`, a.`name`
FROM `table` a, `tmptable` t
WHERE a.`name` = t.`name`;
數(shù)據(jù)庫中有個大表,需要查找其中的名字有重復(fù)的記錄id,以便比較。
如果僅僅是查找數(shù)據(jù)庫中name不重復(fù)的字段,很容易
復(fù)制代碼 代碼如下:
SELECT min(`id`),`name`
FROM `table`
GROUP BY `name`;
但是這樣并不能得到說有重復(fù)字段的id值。(只得到了最小的一個id值)
查詢哪些字段是重復(fù)的也容易
復(fù)制代碼 代碼如下:
SELECT `name`,count(`name`) as count
FROM `table`
GROUP BY `name` HAVING count(`name`) >1
ORDER BY count DESC;
但是要一次查詢到重復(fù)字段的id值,就必須使用子查詢了,于是使用下面的語句來實現(xiàn)MySQL大表重復(fù)字段查詢。
復(fù)制代碼 代碼如下:
SELECT `id`,`name`
FROM `table`
WHERE `name` in (
SELECT `name`
FROM `table`
GROUP BY `name` HAVING count(`name`) >1
);
但是這條語句在mysql中效率太差,感覺mysql并沒有為子查詢生成臨時表。
于是使用先建立臨時表
復(fù)制代碼 代碼如下:
create table `tmptable` as (
SELECT `name`
FROM `table`
GROUP BY `name` HAVING count(`name`) >1
);
然后使用多表連接查詢
復(fù)制代碼 代碼如下:
SELECT a.`id`, a.`name`
FROM `table` a, `tmptable` t
WHERE a.`name` = t.`name`;
結(jié)果這次結(jié)果很快就出來了。
用 distinct去重復(fù)
復(fù)制代碼 代碼如下:
SELECT distinct a.`id`, a.`name`
FROM `table` a, `tmptable` t
WHERE a.`name` = t.`name`;
相關(guān)文章
MySQL中int(10)和int(11)的區(qū)別詳解
本文主要介紹了MySQL中int(10)和int(11)的區(qū)別詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03MYSQL查看時區(qū)并設(shè)置時區(qū)的實現(xiàn)示例
本文主要介紹了MYSQL查看時區(qū)并設(shè)置時區(qū)的實現(xiàn)示例,包括查看全局和會話時區(qū)設(shè)置,設(shè)置全局和會話時區(qū)為東八區(qū),具有一定的參考價值,感興趣的可以了解一下2025-03-03MySQL?binlog格式之Row和Statement語句詳解
這篇文章主要為大家介紹了MySQL?binlog格式之Row和Statement語句詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-12-12Mysql匿名登錄無法創(chuàng)建數(shù)據(jù)庫問題解決方案
這篇文章主要介紹了Mysql匿名登錄無法創(chuàng)建數(shù)據(jù)庫問題解決方案,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-12-12MySQL count(*/column)查詢優(yōu)化的實現(xiàn)
count()是SQL中一個常用的聚合函數(shù),其被用來統(tǒng)計記錄的總數(shù),本文主要介紹了MySQL count(*/column)查詢優(yōu)化的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下2024-09-09MySQL中having和where的區(qū)別及應(yīng)用詳解
這篇文章主要給大家詳細(xì)介紹了MySQL中having和where的區(qū)別以及他們的使用方法,文中有相關(guān)的代碼示例,具有一定的參考價值,需要的朋友可以參考下2023-06-06MySQL對標(biāo)準(zhǔn)SQL的擴(kuò)展方式
MySQL對標(biāo)準(zhǔn)SQL的擴(kuò)展包括磁盤上的數(shù)據(jù)組織方式、通用語言語法、SQL語句語法、數(shù)據(jù)類型、函數(shù)和運算符等,這些擴(kuò)展使得MySQL在某些方面與其他SQL數(shù)據(jù)庫管理系統(tǒng)不同2025-02-02