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日

相关文章

  • 优化mysql之key_buffer_size设置

    关于“优化MySQL之key_buffer_size设置”的完整攻略,我将从以下几个方面进行讲解: 什么是key_buffer_size? 如何设置key_buffer_size? key_buffer_size设置示例说明 总结 什么是key_buffer_size? 在MySQL数据库中,我们经常会遇到大量数据的读取问题。而默认情况下,MySQL使用磁盘…

    MySQL 2023年5月19日
    00
  • phpstudy升级mysql版本到5.7 ,重启mysql不启动

    phpstudy中mysql升级后MySQL服务无法启动 问题产生: 安装好phpstudy后,升级了MySQL后,通过phpstudy启动,Apache可以启动,Mysql无法启动。 解决方法: 之前已经装过Mysql,要把系统服务里面的MySQL删除,留下MySQLa服务。 在cmd命令行下输入:sc delete mysql 即可删除。 步骤: 一、备…

    MySQL 2023年4月13日
    00
  • windows7下启动mysql服务出现服务名无效的原因及解决方法

    问题描述: 在 Windows7 下启动 MySQL 服务时,可能会遇到服务名无效的错误,导致无法启动 MySQL 服务,此时需要进行排查和解决。 解决方法: 确认服务名是否正确 1.1 打开“服务”管理器 在 Windows7 的“控制面板”中,可以找到“管理工具”选项,点击进入后找到“服务”管理器。 1.2 查看服务名是否正确 在“服务”管理器中,找到名…

    MySQL 2023年5月18日
    00
  • SQL注入是什么?SQL注入原理及预防方法

    SQL注入是一种针对Web应用程序的攻击方法,攻击者通过注入恶意的SQL语句来获取或修改数据库中的数据。攻击者可以利用各种SQL注入技术来执行操作,包括数据盗取、数据修改和数据删除等。 SQL注入是利用了应用程序对用户输入数据的不充分验证,把恶意的SQL代码注入到应用程序的查询语句中,通过这种方式来控制或者破坏数据库的行为 SQL注入攻击是Web应用程序最常…

    MySQL 2023年3月10日
    00
  • MYSQL中binlog优化的一些思考汇总

    MYSQL中binlog优化的一些思考汇总 在MYSQL的开发和维护过程中,我们通常会面临 binlog 日志过多导致性能下降的挑战。为了解决这个问题,本文将探讨一些优化 binlog 的思考过程和方法。 一、日志格式 在 MYSQL 中,我们可以通过设置不同的 binlog 日志格式以达到优化性能的目的。常用的日志格式包括 STATEMENT、ROW 和 …

    MySQL 2023年5月19日
    00
  • 解析MySQL中存储时间日期类型的选择问题

    解析MySQL中存储时间日期类型的选择问题需要考虑到多个方面,包括MySQL中支持的不同日期时间类型、存储时区的选择、使用函数进行日期时间计算等。下面是一个详细的攻略。 选择日期时间类型 在MySQL中,常用的日期时间类型有DATE、DATETIME、TIMESTAMP、TIME和YEAR。它们各自的特点如下: DATE:存储日期,格式为YYYY-MM-DD…

    MySQL 2023年5月19日
    00
  • Mysql systemctl start mysqld报错的问题解决

    当使用systemctl start mysqld命令启动MySQL服务时,可能会遇到以下错误信息: Failed to start mysqld.service: Unit not found. 这通常是因为mysqld服务没有正确的定义或配置在systemd上。解决此问题的方法如下: 检查mysqld.service的状态 在命令行中执行以下命令,检查m…

    MySQL 2023年5月18日
    00
  • 【必知必会的MySQL知识】④DCL语言

    目录 一、概述 二 、授权 2.1 语法格式 2.2 语法说明 2.3 权限类型 2.4 权限级别 三、 回收权限 3.1 语法格式 3.2 语法说明 3.3 注意事项 四 、实践操作 一、概述 数据控制语言,用来定义访问权限和安全级别。主要包含包括grant,revoke 关键字 grant 授予权限 revoke 回收权限 二 、授权 2.1 语法格式 …

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