MySQL中查询、删除重复记录的方法大全

MySQL中查询、删除重复记录是使用非常频繁的操作,本文将详细讲解MySQL中查询、删除重复记录的方法大全。

1. 查询重复记录

1.1 利用GROUP BY和HAVING子句

SELECT column_name(s) FROM table_name
GROUP BY column_name(s)
HAVING COUNT(*) > 1;

上述代码中,GROUP BY语句根据字段将重复值合并到一起,并统计其数量,HAVING子句过滤掉非重复行。

示例如下,假设有一张city表如下:

id name country_code district population
1 Kabul AFG Kabol 1780000
2 Qandahar AFG Qandahar 237500
3 Herat AFG Herat 186800
4 Mazar-e-Sharif AFG Balkh 127800
5 Amsterdam NLD Noord-Holland 731200

查询city表中country_code重复的记录,查询语句如下:

SELECT country_code, COUNT(*) FROM city
GROUP BY country_code
HAVING COUNT(*) > 1;

结果如下:

country_code COUNT(*)
AFG 4

1.2 利用子查询

SELECT column_name(s) FROM table_name
WHERE column_name IN (
  SELECT column_name FROM table_name
  GROUP BY column_name HAVING COUNT(*) >1
);

上述代码中,首先用子查询找到重复的记录的字段值,然后在主查询中使用IN语句将其查询出来。

示例如下,假设有一张表student,如下:

s_id s_name s_sex s_course
1 小红 语文
2 小明 数学
3 小芳 英语
4 小兰 物理
5 小刚 化学
6 小美 数学
7 小忠 语文

查询出重复的成绩,查询语句如下:

SELECT s_course FROM student
WHERE s_course IN (
  SELECT s_course FROM student
  GROUP BY s_course HAVING COUNT(*) >1
);

结果如下:

s_course
数学
语文

2. 删除重复记录

2.1 利用子查询删除重复记录

DELETE FROM table_name WHERE column_name NOT IN (
  SELECT MAX(column_name) FROM table_name GROUP BY other_column_name
);

上述代码中,子查询查找出所有分组中的最大值,而NOT IN运算符保留最大值,从而删除不需要的记录。

示例如下,假设有一张orders表,如下:

order_id order_date customer employee
1 2019-02-11 123 001
2 2019-02-12 456 002
3 2019-02-13 123 001
4 2019-02-14 789 003
5 2019-02-15 123 001

删除orders表中customer和employee字段出现重复的记录,删除语句如下:

DELETE FROM orders WHERE order_id NOT IN (
  SELECT MAX(order_id) FROM orders GROUP BY customer, employee
);

执行结果,orders表中只剩下order_id为2、4和5的记录,删除了order_id为1和order_id为3的记录。

2.2 利用临时表删除重复记录

CREATE TEMPORARY TABLE temp_table AS
  SELECT * FROM table_name GROUP BY column_name;
TRUNCATE table_name;
INSERT INTO table_name SELECT * FROM temp_table;

上述代码中,首先将查询结果存储到临时表temp_table中,然后将数据从table_name表中清空,并最后将临时表temp_table中的数据重新插入到table_name表中。

示例如下,假设有一张orders表,如下:

order_id order_date customer employee
1 2019-02-11 123 001
2 2019-02-12 456 002
3 2019-02-13 123 001
4 2019-02-14 789 003
5 2019-02-15 123 001

删除orders表中customer和employee字段出现重复的记录,删除语句如下:

CREATE TEMPORARY TABLE temp_table AS
  SELECT * FROM orders GROUP BY customer, employee;
TRUNCATE orders;
INSERT INTO orders SELECT * FROM temp_table;

执行结果,orders表中只剩下order_id为1、2和4的记录,删除了order_id为3和order_id为5的记录。

3. 总结

本文中详细讲解了MySQL中查询、删除重复记录的方法大全,包括利用GROUP BY和HAVING子句、利用子查询和利用临时表删除重复记录,这些方法各有优缺点,读者可根据实际需求进行选择。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:MySQL中查询、删除重复记录的方法大全 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • Navicat Premium12远程连接MySQL数据库

     https://blog.csdn.net/dengjin20104042056/article/details/95091506 方法二: step1: 修改表user mysql> use mysql; mysql> update user set host = ‘%’ where user = ‘root’; mysql>flush…

    MySQL 2023年4月13日
    00
  • mysql中,now()函数和sysdate()函数有什么区别?

    问题描述:   今天在看mysql的时间函数,now()和sysdate(),记录下两者之间有什么不同. 实验过程: 1.执行以下的两个语句: mysql> select now(),sleep(2),now(); +———————+———-+———————+ | now() | sl…

    MySQL 2023年4月13日
    00
  • Windows下MySQL 5.7无法启动的解决方法

    Windows下MySQL 5.7无法启动的解决方法 问题描述 在Windows操作系统上,当尝试启动MySQL 5.7 时,可能会遇到无法启动的情况。这个问题可能由多种原因引起,如端口占用、配置文件错误、权限问题等。本篇攻略将分别介绍解决这些问题的方法,以帮助读者快速解决问题,并顺利启动MySQL 5.7。 解决方法一:检查端口占用以及防火墙设置 打开cm…

    MySQL 2023年5月18日
    00
  • TiDB与MySQL的SQL差异及执行计划简析

    作者:京东零售 肖勇 一、 前言导读 TiDB作为NewSQL,其在对MySQL(SQL92协议)的兼容上做了很多,MySQL作为当下使用较广的事务型数据库,在IT界尤其是互联网间使用广泛,那么对于开发人员来说,1)两个数据库产品在SQL开发及调优的过程中,都有哪些差异?在系统迁移前需要提前做哪些准备? 2)TiDB的执行计划如何查看,如何SQL调优? 本文…

    MySQL 2023年4月17日
    00
  • 详解MySQL的5种整数类型

    MySQL支持多种整数类型,每种类型的范围大小和存储空间不同。 下面是MySQL的整数类型及其说明: TINYINT类型 TINYINT类型从-128到127的有符号范围或0到255的无符号范围。大小为1字节。 使用实例: CREATE TABLE test_tinyint ( id INT PRIMARY KEY, t TINYINT SIGNED, u …

    MySQL 2023年3月9日
    00
  • mysql错误处理之ERROR 1786 (HY000)

    下面是关于“mysql错误处理之ERROR 1786 (HY000)”的完整攻略。 1. ERROR 1786 (HY000)是什么? ERROR 1786 (HY000)是MySQL数据库的错误代码之一,通常表示在进行DML操作(INSERT、UPDATE、DELETE等)时,如果操作的行数超过了max_allowed_packet的限制,则会产生此错误码…

    MySQL 2023年5月18日
    00
  • MySQL 错误处理例子[译]

    下面是关于“MySQL 错误处理例子[译]”的完整攻略: 1. 前言 在开发MySQL应用时,处理错误是一个非常重要的方面。如果我们不好好处理错误,可能会影响到系统的运行稳定性和数据的安全性。本文将介绍如何在MySQL中处理错误,以及两个示例。 2. MySQL中的错误类型 MySQL中有三种错误类型: 语法错误 运行时错误 警告信息 其中,语法错误指的是M…

    MySQL 2023年5月18日
    00
  • MySQL 并行复制方案演进历史及原理分析

    预告: 《MySQL实战》即将出版,敬请关注! 有过线上 MySQL 维护经验的童鞋都知道,主从延迟往往是一个让人头疼不已的问题。 不仅仅是其造成的潜在问题比较严重,而且主从延迟原因的定位尤其考量 DBA 的综合能力:既要熟悉复制的内部原理,又能解读主机层面的资源使用情况,甚至还要会分析 binlog。 导致主从延迟的一个常见原因是,对于 binlog 中的…

    MySQL 2023年4月11日
    00
合作推广
合作推广
分享本页
返回顶部