`

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

阅读更多
第一种:

先来录入一些测试数据

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`;

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



第三种方法最好!
分享到:
评论
1 楼 qianguming 2014-01-14  
顶起

相关推荐

    SQL重复记录查询和删除方法

    MYSQL 查询和删除重复记录的方法很多,下面为您介绍几种常用的 MYSQL 查询和删除重复记录的方法,希望对您查询和删除重复数据方面能有所帮助。  SQL重复记录查询的几种方法:  1. 查找表中多余的重复记录,重复...

    PHP实现在数据库百万条数据中随机获取20条记录的方法

    本文实例讲述了PHP实现在数据库百万条数据中随机获取20条记录的方法。分享给大家供大家参考,具体如下: 额,为什么要写这个?...还有一种方法,随机20次,重复执行20次。 例如: $sum=800000;//得到总条数 /

    mysql学习———表的约束

    在mysql中有五种约束: 主键 为了快速查找表中的某条信息,可以通过设置主键来实现。主键约束是通过PRIMATY KEY 定义的,它可以唯一标识表中的记录 在 mysql中,主键约束分为两种 注意:每个数据表中最多只能有一个...

    MySql基本查询、连接查询、子查询、正则表达查询讲解

    mysql中的五种统计函数: (1)max:求最大值 求每个部门的最高工资: [sql] view plain copy select EMP_NAME,EMP_DEP,max(EMP_SALARY) from EMPLOYEES group by EMP_DEP; (2)min:求最小值 求每个部门的最仰...

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    实例058 用TreeSet生成不重复自动排序 随机数组 71 实例059 Map映射集合实现省市级联选择框 73 第4章 字符串处理技术 75 4.1 格式化字符串 76 实例060 把数字格式化为货币字符串 76 实例061 格式化当前日期 77 实例...

    P2P视频技术源码(VC)

    delete: 较为复杂一些, 考虑下面几种情况 old的开始比new[j]的结束大 old的结束在new[j]的开始前 old和new[j]有共同部分, 而且 old含在new[j] 中 new[j]含在old中 互不包含, new[j] 在前 互不包含, old 在前 5. ...

    P2P视频播放器 详细制作实例

    delete: 较为复杂一些, 考虑下面几种情况 old[i]的开始比new[j]的结束大 old[i]的结束在new[j]的开始前 old[i]和new[j]有共同部分, 而且 old[i]含在new[j] 中 new[j]含在old[i]中 互不包含, new[j] 在前 互不...

    经典全面的SQL语句大全

    这一操作可以通过好几种方式来完成,但是 SELECT 语句只显示一种可能(这里的ID 是自动生成的号码): SQL = "SELECT * FROM Customers WHERE ID BETWEEN " & RNumber & " AND " & RNumber & "+ 9"  注意:以上...

    php网络开发完全手册

    1.5 几种综合网络服务器系统的安装 14 1.5.1 XAMPP 14 1.5.2 WAMP 16 1.5.3 Appserv 17 1.5.4 EasyPHP 18 1.5.5 VertrigoServ 19 1.6 几种开发工具的介绍 20 1.6.1 Vi及Vim 20 1.6.2 Eclipse+PHPEclipse插件 21 ...

    程序员的SQL金典.rar

     本书特色:主要介绍SQL的语法规则及在实际开发中的应用,并且对SQL在MySQL、MS SQL Server、Oracle和DB2中的差异进行了分析;详细讲解数据库对增、删、改、查等SQL的支持并给出了相应的SQL应用案例;透彻分析函数...

    程序员的SQL金典6-8

     10.4.1 MySQL中的自动增长字段  10.4.2 MS SQL Server中的自动增长字段  10.4.3 Oracle中的自动增长字段  10.4.4 DB2中的自动增长字段  10.5 业务主键与逻辑主键  10.6 NULL的学问  10.6.1 NULL与比较运算符...

    程序员的SQL金典7-8

     10.4.1 MySQL中的自动增长字段  10.4.2 MS SQL Server中的自动增长字段  10.4.3 Oracle中的自动增长字段  10.4.4 DB2中的自动增长字段  10.5 业务主键与逻辑主键  10.6 NULL的学问  10.6.1 NULL与比较运算符...

    程序员的SQL金典4-8

     10.4.1 MySQL中的自动增长字段  10.4.2 MS SQL Server中的自动增长字段  10.4.3 Oracle中的自动增长字段  10.4.4 DB2中的自动增长字段  10.5 业务主键与逻辑主键  10.6 NULL的学问  10.6.1 NULL与比较运算符...

    程序员的SQL金典3-8

     10.4.1 MySQL中的自动增长字段  10.4.2 MS SQL Server中的自动增长字段  10.4.3 Oracle中的自动增长字段  10.4.4 DB2中的自动增长字段  10.5 业务主键与逻辑主键  10.6 NULL的学问  10.6.1 NULL与比较运算符...

    仿世纪佳缘婚介交友系统5.3 ASP+SQL

    调用方法为号">,其中ID号为记录号,即为该列表中的调用ID列中的数值。然后把该调用代码加到模板相应地方即可。例如要调用最新5个会员,ID号为1,那么调用代码为:<script src="Ns_News.asp?sortid=1"></script> ...

    editplus 代码编辑器html c++ jsp css

    (1)选择“从行首开始匹配”,“查找内容”组合框中出现字符“^”,表示待查找字符串必须出现在文本中一行的行首。 (2)选择“字符在范围中”,那么在“^”后会增加一对括号“[]”,当前插入点在括号中。括号在...

Global site tag (gtag.js) - Google Analytics