`

[转]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  
顶起

相关推荐

    MySQL 查询某个字段不重复的所有记录

    除了上述问题,MySQL还提供了其他方法来处理不重复记录,如`GROUP BY`结合`HAVING`子句,但这通常用于计算聚合函数,如计数或求和。在本场景中,结合`JOIN`操作可能是更为直接和有效的解决方案。 在实际数据库管理...

    从字符串中查找字符出现次数的方法和性能对比

    本文将深入探讨几种实现这一功能的方法,并通过实际代码示例和性能对比分析,帮助读者理解每种方法的优劣,以便在实际开发中做出更合理的选择。 ### 方法一:循环遍历法 这种方法是最直观的,也是大多数初学者接触...

    UOA, mysql cherrytree文档

    Linux是一种广泛使用的开源操作系统,而MySQL则是一种流行的开源关系型数据库管理系统。下面将详细讲解这两个领域的基础知识,以及如何结合CherryTree来管理和组织这些知识。 首先,让我们关注Linux。Linux是基于...

    在MySQL中实现二分查找的详细教程

    ` - 这种情况需要从最后一个4之后开始返回所有记录,因此查找过程需要越过重复的4。 2. `SELECT * FROM t1 WHERE b >= 4;` - 这种情况需要找到第一个4并返回所有后续记录,因此查找需要定位到第一个4。 3. `SELECT *...

    MySQL数据库笔试试题及答案(全)

    - **主键的建立方法**:主键可以通过以下几种方式创建: - 在创建表时直接指定某个列为 PRIMARY KEY。 - 使用 ALTER TABLE 添加 PRIMARY KEY 约束。 - 创建一个独立的索引,并将其标记为主键索引。 - 通过修改...

    MySQL数据库考试试题及答案

    - **解析**:虽然题目中的选项为“三”,实际上建立主键的方法可以分为几类,包括在创建表时定义、通过ALTER TABLE添加、使用自增列等。 ### 15. 视图操作限制 - **知识点**:视图上无法定义基本表。 - **示例题目*...

    mysql中判断记录是否存在方法比较

    在MySQL数据库操作中,判断记录是否存在是常见的需求,特别是在数据插入前进行检查,避免重复数据。下面我们将深入探讨几种常用的方法,并分析它们的性能和适用场景。 首先,一种直观但效率较低的方法是通过`SELECT...

    MySQL初学者笔记1

    当查询结果中可能存在重复项时,可以使用`DISTINCT`关键字去除重复记录,仅保留唯一的值。例如,为了获取`employees`表中涉及的所有不同的部门编号,可以执行以下命令: ```sql SELECT DISTINCT department_id FROM ...

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

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

    MySQL数据库中关于索引的研究.pdf

    B树是一种多叉平衡查找树,其特点是每个节点最多有m个子节点,且非叶子节点至少包含[ceil(m/2)]个孩子。B+树是B树的变种,它的每个非叶子节点包含k个关键码,所有的数据都存储在叶子节点中,这种结构更利于数据检索...

    MySQL查询性能优化

    在评估查询开销的时候,要考虑一下从表中找到某一行数据的成本, MySQL 有好几种访问方式可以查找并返回一行结果,有些访问方式可能需要扫描很多行才能获取结果,有些访问方式可能无须扫描就能返回结果。 好的索引...

    浅谈MYSQL中的索引优化-收藏学习.pdf

    索引本质上是一种数据结构,它允许用户快速定位数据库中的记录。在MySQL中,B+树是最常见的索引类型之一。 **B+树**的特点在于所有实际数据都存储在叶子节点中,而非叶子节点仅包含指向叶子节点的指针。这种结构...

    mysql去重的两种方法详解及实例代码

    在MySQL中,去重是常见的数据处理需求,主要目的是消除数据表中重复的记录。本文将详细介绍两种在MySQL中实现去重的方法,并提供相应的实例代码。 ### 方法一:使用DISTINCT关键字 `DISTINCT` 是MySQL中用于去除...

    50道MySQL精英级面试题(含答案).pdf

    MySQL是一种广泛应用于Web开发和数据分析的关系型数据库管理系统,以其高效、稳定和丰富的功能深受开发者喜爱。本篇文章将探讨几个MySQL的重要知识点,包括分组查询、数据备份与恢复、以及一些常见的面试题,帮助你...

    mysql加锁分析

    为了更深入地理解加锁行为,我们可以通过分析几种典型的SQL语句组合来探讨其具体的加锁机制: 1. **组合一:ID主键 + RC(READ COMMITTED)** - 当执行基于主键的查询时,在RC隔离级别下,InnoDB将对查询结果加S锁...

    mysql面试题有哪些?

    面试中,对于MySQL的考察通常会涉及到以下几个关键知识点: 1. **MySQL简介**:MySQL是一种ACID(原子性、一致性、隔离性、持久性)遵循的关系型数据库,支持SQL标准,其主要特点是开源、免费、速度快、可移植性强...

    Mysql面试题详解MySQL常见面试题汇总(建议收藏!!!)

    3. MySQL 的 binlog 有几种录入格式?:MySQL 的 binlog 有多种录入格式,如 statement、row、mixed 等。 4. 超大分页怎么处理?:超大分页可以通过使用 Limit 语句或游标来处理。 5. 三个范式的定义:三个范式是指...

    可能是史上最全的-------mysql连结查询精炼.pdf

    在本文件中,我们探讨了几种不同的连接类型:交叉连接、自然连接、内连接、外连接以及联合查询。 1. **交叉连接 (CROSS JOIN)**:也称为笛卡尔积,它返回第一个表中的每一行与第二个表中的每一行的组合。在MySQL中...

Global site tag (gtag.js) - Google Analytics