求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Model Center   Code  
会员   
要资料
 
 

mysql教程
MySQL快速学习入门
MySQL是什么
MySQL安装
MySQL示例数据库
MySQL导入示例数据库
MySQL基础教程
MySQL查询数据
MySQL WHERE语句
MySQL插入数据
MySQL更新表数据
MySQL删除表数据
MySQL创建与删除数据库
MySQL创建表
MySQL修改表结构
MySQL重命名表
MySQL数据类型
高级部分
MySQL技巧
MySQL存储过程
MySQL视图
MySQL触发器
MySQL管理
MySQL全文搜索
MySQL函数
应用程序连接
MySQL+Node.js连接和操作
Python+MySQL连接和操作
 
 

如何在MySQL表中找到重复的值
562 次浏览
4次  

在本教程中,您将学习如何在MySQL中找到一个或多个列的重复值。

在开始之前

由于原因很多,数据库中的重复事件发生很多。查找重复值是使用数据库时必须处理的重要任务之一。

对于演示,我们将创建一个名为contacts表,其中包含四个列:id,first_name,last_name和email。

USE testdb;
CREATE TABLE contacts (
id INT PRIMARY KEY AUTO_INCREMENT,
first_name VARCHAR(50) NOT NULL,
last_name VARCHAR(50) NOT NULL,
email VARCHAR(255) NOT NULL
);

以下语句将行插入到contacts表中:

INSERT INTO contacts (first_name,last_name,email)
VALUES ('Carine ','Schmitt','carine.schmitt@qq.com'),
('Jean','King','jean.king@yiibai.com'),
('Peter','Ferguson','peter.ferguson@google.com'),
('Janine ','Labrune','janine.labrune@aol.com'),
('Jonas ','Bergulfsen','jonas.bergulfsen@mac.com'),
('Janine ','Labrune','janine.labrune@aol.com'),
('Susan','Nelson','susan.nelson@qq.com'),
('Zbyszek ','Piestrzeniewicz','zbyszek.piestrzeniewicz@qq.com'),
('Roland','Keitel','roland.keitel@yahoo.com'),
('Julie','Murphy','julie.murphy@yahoo.com'),
('Kwai','Lee','kwai.lee@google.com'),
('Jean','King','jean.king@qq.com'),
('Susan','Nelson','susan.nelson@qq.comt'),
('Roland','Keitel','roland.keitel@yahoo.com');

然后,查询表中的数据如下 -

SELECT
*
FROM
contacts;

执行上面查询,得到以下结果 -

+----+------------+-----------------+--------------------------------+
| id | first_name | last_name | email |
+----+------------+-----------------+--------------------------------+
| 1 | Carine | Schmitt | carine.schmitt@qq.com |
| 2 | Jean | King | jean.king@yiibai.com |
| 3 | Peter | Ferguson | peter.ferguson@google.com |
| 4 | Janine | Labrune | janine.labrune@aol.com |
| 5 | Jonas | Bergulfsen | jonas.bergulfsen@mac.com |
| 6 | Janine | Labrune | janine.labrune@aol.com |
| 7 | Susan | Nelson | susan.nelson@qq.com |
| 8 | Zbyszek | Piestrzeniewicz | zbyszek.piestrzeniewicz@qq.com |
| 9 | Roland | Keitel | roland.keitel@yahoo.com |
| 10 | Julie | Murphy | julie.murphy@yahoo.com |
| 11 | Kwai | Lee | kwai.lee@google.com |
| 12 | Jean | King | jean.king@qq.com |
| 13 | Susan | Nelson | susan.nelson@qq.comt |
| 14 | Roland | Keitel | roland.keitel@yahoo.com |
+----+------------+-----------------+--------------------------------+
14 rows in set

在contacts表中,有一些行在first_name,last_name和email列中具有重复的值,下面来看看如何查询它们。

在一列中找到重复的值

在基于一列的表中找到重复值,则使用以下语句:

SELECT
col,
COUNT(col)
FROM
table_name
GROUP BY col
HAVING COUNT(col)>1;

如果表中出现多个值,则该值将被视为重复。在这个语句中,使用COUNT函数的GROUP BY子句来计算指定列(col)的值。HAVING子句中的条件仅包含值count大于1的行,这些行是重复的行。

可以使用此查询在contacts表中查找具有重复email的所有行,如下所示:

SELECT
email,
COUNT(email)
FROM
contacts
GROUP BY email
HAVING COUNT(email)>1;

以下显示查询的输出:

+-------------------------+--------------+
| email | COUNT(email) |
+-------------------------+--------------+
| janine.labrune@aol.com | 2 |
| roland.keitel@yahoo.com | 2 |
+-------------------------+--------------+
2 rows in set

如上查询结果中可以看到,有一些行具有相同的电子邮件。

在多个列中查找重复值

有时,希望基于多个列而不是一个查找重复。在这种情况下,您可以使用以下查询:

SELECT
col1, COUNT(col1),
col2, COUNT(col2),
...
FROM
table_name
GROUP BY
col1,
col2, ...
HAVING
(COUNT(col1)>1) AND
(COUNT(col2)>1) AND
...

只有当列的组合重复时,行才被认为是重复的,所以在HAVING子句中使用了AND运算符。

例如,要使用first_name,last_name和email列中的重复值在contacts表中查找行,请使用以下查询:

SELECT
first_name, COUNT(first_name),
last_name, COUNT(last_name),
email, COUNT(email)
FROM
contacts
GROUP BY
first_name ,
last_name ,
email
HAVING COUNT(first_name)>1
AND COUNT(last_name)>1
AND COUNT(email)>1;

执行上面查询后,得到以下输出:

+------------+-------------------+-----------+--------------+--------------+
| first_name | COUNT(first_name) | last_name | COUNT(last_name) | email | COUNT(email) |
+------------+-------------------+-----------+--------------+--------------+
| Janine | 2 | Labrune | 2 | janine.labrune@aol.com | 2 |
| Roland | 2 | Keitel | 2 | roland.keitel@yahoo.com | 2 |
+------------+-------------------+-----------+--------------+--------------+
2 rows in set

在本教程中,您已经学会了如何根据MySQL中一个或多个列的值来找到重复的行。


您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码: 验证码,看不清楚?请点击刷新验证码 必填



562 次浏览
4次
 捐助