MySQL查询去重复保留一条

MySQL查询去重复保留一条

MySQL查询去重复保留一条

引言

在实际的数据库应用开发中,我们经常需要从数据库中查询数据并展示。有时候我们会遇到查询结果中有重复的记录,而我们只想保留其中的一条。本文将详细介绍如何在MySQL中进行查询去重复并保留一条的操作。

1. 创建表

为了演示,我们首先需要创建一个包含重复记录的表students。表结构如下:

CREATE TABLE students (
    id INT(11) PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(50),
    age INT(3),
    grade VARCHAR(10)
);

然后我们向表中插入一些数据,包括重复记录,用于后续的实例操作。

INSERT INTO students (name, age, grade) VALUES
    ('Alice', 18, 'A'),
    ('Bob', 19, 'B'),
    ('Alice', 18, 'A'),
    ('Cindy', 19, 'C'),
    ('Bob', 19, 'B');

2. 查询去重复并保留一条

在MySQL中,我们可以利用DISTINCT关键字来去除重复记录。下面是一些常用的查询去重复的方法。

2.1 使用DISTINCT关键字

最常见的方法是在查询语句中使用DISTINCT关键字,通过去重复后返回结果。下面的示例查询了表students中的姓名,并通过DISTINCT去重复:

SELECT DISTINCT name FROM students;

运行结果如下:

+-------+
| name  |
+-------+
| Alice |
| Bob   |
| Cindy |
+-------+

上述查询结果只显示了去重的姓名,但无法保留完整的一条记录。

2.2 使用GROUP BY子句

另一种方法是使用GROUP BY子句,结合聚合函数来实现。例如,我们可以按照姓名name进行分组,并选择每个分组的首个记录作为结果:

SELECT name, MIN(age), grade FROM students GROUP BY name;

运行结果如下:

+-------+---------+-------+
| name  | MIN(age)| grade |
+-------+---------+-------+
| Alice |   18    |   A   |
| Bob   |   19    |   B   |
| Cindy |   19    |   C   |
+-------+---------+-------+

上述查询结果通过MIN(age)函数选择了每个分组中最小的年龄,保留了完整的一条记录。

2.3 使用子查询

还有一种方法是使用子查询,通过查询内嵌查询来实现。首先我们需要创建一个子查询,去除重复记录,并通过子查询的结果来获取完整的一条记录。

下面的示例中,我们首先查询了去重的姓名name,然后将去重后的结果和原始表students进行关联,最后通过子查询的结果来获取完整记录:

SELECT s1.id, s1.name, s1.age, s1.grade
FROM students s1
INNER JOIN (
    SELECT MIN(id) AS min_id
    FROM students
    GROUP BY name
) s2 ON s1.id = s2.min_id;

运行结果如下:

+----+-------+-----+-------+
| id | name  | age | grade |
+----+-------+-----+-------+
|  1 | Alice |  18 |   A   |
|  2 | Bob   |  19 |   B   |
|  4 | Cindy |  19 |   C   |
+----+-------+-----+-------+

上述查询结果通过子查询的方式,获取了去重后每个分组中最小的id,并通过关联查询获取了完整的一条记录。

结论

本文介绍了在MySQL中查询去重复并保留一条的操作方法。通过使用DISTINCT关键字、GROUP BY子句以及子查询,我们可以灵活地根据实际需求选择合适的方法。根据不同的场景和需求,选择适当的方法可以提高查询效率和准确性。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程