第一种:
先来录入一些测试数据
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`;
结果这次结果很快就出来了。
第三种方法最好!
分享到:
相关推荐
除了上述问题,MySQL还提供了其他方法来处理不重复记录,如`GROUP BY`结合`HAVING`子句,但这通常用于计算聚合函数,如计数或求和。在本场景中,结合`JOIN`操作可能是更为直接和有效的解决方案。 在实际数据库管理...
本文将深入探讨几种实现这一功能的方法,并通过实际代码示例和性能对比分析,帮助读者理解每种方法的优劣,以便在实际开发中做出更合理的选择。 ### 方法一:循环遍历法 这种方法是最直观的,也是大多数初学者接触...
Linux是一种广泛使用的开源操作系统,而MySQL则是一种流行的开源关系型数据库管理系统。下面将详细讲解这两个领域的基础知识,以及如何结合CherryTree来管理和组织这些知识。 首先,让我们关注Linux。Linux是基于...
` - 这种情况需要从最后一个4之后开始返回所有记录,因此查找过程需要越过重复的4。 2. `SELECT * FROM t1 WHERE b >= 4;` - 这种情况需要找到第一个4并返回所有后续记录,因此查找需要定位到第一个4。 3. `SELECT *...
- **主键的建立方法**:主键可以通过以下几种方式创建: - 在创建表时直接指定某个列为 PRIMARY KEY。 - 使用 ALTER TABLE 添加 PRIMARY KEY 约束。 - 创建一个独立的索引,并将其标记为主键索引。 - 通过修改...
- **解析**:虽然题目中的选项为“三”,实际上建立主键的方法可以分为几类,包括在创建表时定义、通过ALTER TABLE添加、使用自增列等。 ### 15. 视图操作限制 - **知识点**:视图上无法定义基本表。 - **示例题目*...
在MySQL数据库操作中,判断记录是否存在是常见的需求,特别是在数据插入前进行检查,避免重复数据。下面我们将深入探讨几种常用的方法,并分析它们的性能和适用场景。 首先,一种直观但效率较低的方法是通过`SELECT...
当查询结果中可能存在重复项时,可以使用`DISTINCT`关键字去除重复记录,仅保留唯一的值。例如,为了获取`employees`表中涉及的所有不同的部门编号,可以执行以下命令: ```sql SELECT DISTINCT department_id FROM ...
本文实例讲述了PHP实现在数据库百万条数据中随机获取20条记录的方法。分享给大家供大家参考,具体如下: 额,为什么要写这个?...还有一种方法,随机20次,重复执行20次。 例如: $sum=800000;//得到总条数 /
B树是一种多叉平衡查找树,其特点是每个节点最多有m个子节点,且非叶子节点至少包含[ceil(m/2)]个孩子。B+树是B树的变种,它的每个非叶子节点包含k个关键码,所有的数据都存储在叶子节点中,这种结构更利于数据检索...
在评估查询开销的时候,要考虑一下从表中找到某一行数据的成本, MySQL 有好几种访问方式可以查找并返回一行结果,有些访问方式可能需要扫描很多行才能获取结果,有些访问方式可能无须扫描就能返回结果。 好的索引...
索引本质上是一种数据结构,它允许用户快速定位数据库中的记录。在MySQL中,B+树是最常见的索引类型之一。 **B+树**的特点在于所有实际数据都存储在叶子节点中,而非叶子节点仅包含指向叶子节点的指针。这种结构...
在MySQL中,去重是常见的数据处理需求,主要目的是消除数据表中重复的记录。本文将详细介绍两种在MySQL中实现去重的方法,并提供相应的实例代码。 ### 方法一:使用DISTINCT关键字 `DISTINCT` 是MySQL中用于去除...
MySQL是一种广泛应用于Web开发和数据分析的关系型数据库管理系统,以其高效、稳定和丰富的功能深受开发者喜爱。本篇文章将探讨几个MySQL的重要知识点,包括分组查询、数据备份与恢复、以及一些常见的面试题,帮助你...
为了更深入地理解加锁行为,我们可以通过分析几种典型的SQL语句组合来探讨其具体的加锁机制: 1. **组合一:ID主键 + RC(READ COMMITTED)** - 当执行基于主键的查询时,在RC隔离级别下,InnoDB将对查询结果加S锁...
面试中,对于MySQL的考察通常会涉及到以下几个关键知识点: 1. **MySQL简介**:MySQL是一种ACID(原子性、一致性、隔离性、持久性)遵循的关系型数据库,支持SQL标准,其主要特点是开源、免费、速度快、可移植性强...
3. MySQL 的 binlog 有几种录入格式?:MySQL 的 binlog 有多种录入格式,如 statement、row、mixed 等。 4. 超大分页怎么处理?:超大分页可以通过使用 Limit 语句或游标来处理。 5. 三个范式的定义:三个范式是指...
在本文件中,我们探讨了几种不同的连接类型:交叉连接、自然连接、内连接、外连接以及联合查询。 1. **交叉连接 (CROSS JOIN)**:也称为笛卡尔积,它返回第一个表中的每一行与第二个表中的每一行的组合。在MySQL中...