您的位置:首页 > 数据库 > MySQL

MYSQL中查找重复记录的几种情况

2013-11-20 18:00 274 查看
转自:/article/3883960.html

第一种:

先来录入一些测试数据

CREATE TABLE news(

ID INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,

Title VARCHAR(255) NOT NULL,

PRIMARY KEY(ID)

);

INSERT INTO news (Title) VALUES (’aaa’);

INSERT INTO news (Title) VALUES (’aaa’);

INSERT INTO news (Title) VALUES (’aaa’);

INSERT INTO news (Title) VALUES (’bbb’);

INSERT INTO news (Title) VALUES (’bbb’);

INSERT INTO news (Title) VALUES (’ccc’);

列出所有Title字段重复的记录

SELECT * FROM news WHERE Title IN (

SELECT Title FROM news GROUP BY Title HAVING (COUNT(*)) >1

)

最大的缺点:效率低下,如果数据量超过1万差不多就会死掉。

第二种:

在有些应用里面,我们需要查询重复次数最多的一些记录,虽然这是一个很简单的查询语句,但是对许多初学者来说,仍然有些难度,特发此文章备查。

Code:

SELECT keyword, count( * ) AS count

FROM article_keyword

GROUP BY keyword

ORDER BY count DESC

LIMIT 20

此段查询语句返回 article_keyword 表中 keyword 重复次数(count) 最多的20条记录。

Code:

SELECT DISTINCT count( * ) AS count

FROM article_keyword

GROUP BY keyword

ORDER BY count DESC

LIMIT 6

此段查询语句返回 article_keyword 表中 keyword 的重复次数(count) 排名前 6 的数值。通过添加 DISTINCT 返回唯一记录。

第三种:

数据库中有个大表,需要查找其中的名字有重复的记录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`;

结果这次结果很快就出来了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: