首页数据库MySQL中删除重复的行的方法和操作是什么?

MySQL中删除重复的行的方法和操作是什么?

时间2024-03-24 10:40:03发布访客分类数据库浏览550
导读:这篇文章我们来了解MySQL中如何删除重复的行,有时候,我们可能会在MySQL数据库中遇到重复的行,因此本文就给大家分享一下删除重复的行的方法,下文有很详细的介绍,有需要的朋友可以参考,接下来就跟随小编来一起学习一下吧! 先决条件 安...

这篇文章我们来了解MySQL中如何删除重复的行,有时候,我们可能会在MySQL数据库中遇到重复的行,因此本文就给大家分享一下删除重复的行的方法,下文有很详细的介绍,有需要的朋友可以参考,接下来就跟随小编来一起学习一下吧!

先决条件

安装了MySQL的系统 MySQL root用户帐户 访问终端窗口/命令行(Ctrl-Alt-T,“搜索”> “终端”) 设置测试数据库

如果您已经可以使用MySQL数据库,请跳至下一部分。

否则,请打开终端窗口并输入以下内容:

mysql –u root –p

出现提示时,输入MySQL安装的根密码。如果您具有特定的用户帐户,请使用这些凭据而不是root用户。

系统提示应更改为:

mysql>

注意:如果您无法连接到MySQL服务器,则可能会收到一条消息,提示访问已被拒绝。如果需要帮助,请参考我们的文章,该文章关于如何解决此MySQL错误。

创建测试数据库

您可以在现有数据库中创建一个新表。为此,通过列出所有现有实例并找到合适的数据库:

SHOW DATABASES;

或者,您可以通过输入以下命令来创建新数据库:

CREATE DATABASE IF NOT EXISTS testdata;

要开始testdata使用新数据库,请使用:

USE testdata; 添加表和数据

进入数据库后,使用以下命令添加包含以下数据的表:

CREATE TABLE dates ( id INT PRIMARY KEY AUTO_INCREMENT, day VARCHAR(2) NOT NULL, month VARCHAR(10) NOT NULL, year VARCHAR(4) NOT NULL ); INSERT INTO dates (day,month,year) VALUES (’29’,’January’,’2011’), (’30’,’January’,’2011’), (’30’,’January’,’2011’), (’14’,’February,’2017’), (’14’,’February,’2018’), (‘23’,’March’,’2018’), (‘23’,’March’,’2018’), (‘23’,’March’,’2019’), (‘29’,’October’,’2019’), (‘29’,’November’,’2019’), (‘12’,’November’,’2017’), (‘17’,’August’,’2018’), (‘05’,’June’,’2016’); 显示日期表的内容

要查看按日期排序的所有输入日期的显示,请键入:

SELECT * FROM dates ORDER BY year;

输出应以适当的顺序显示日期列表。

显示重复的行

要查找测试数据库中是否存在重复的行,请使用以下命令:

SELECT day, COUNT(day), month, COUNT(month), year, COUNT(year) FROM dates GROUP BY day, month, year HAVING COUNT(day) > 1 AND COUNT(month) > 1 AND COUNT(year) > 1;

系统将显示所有重复的值。在这种情况下,您应该看到:

此格式可以选择多个列。如果您有一列具有唯一标识符的列,例如联系人列表中的电子邮件地址或单个日期列,则只需从该列中进行选择。

注意:了解在MySQL中查找重复行的其他方法。

删除重复的行

在使用下面提到的任何方法之前,请记住您需要在现有数据库中工作。我们将使用示例数据库:

USE testdata; 选项1:使用INNER JOIN删除重复的行

要在我们的测试MySQL表中删除重复的行,请输入以下内容:

delete t1 FROM dates t1 INNER JOIN dates t2 WHERE t1.id t2.id AND t1.day = t2.day AND t1.month = t2.month AND t1.year = t2.year;

您也可以使用“显示重复行”中的命令来验证删除。

注意:如果您具有唯一的列标识符,则可以将其替换为月,日和年列标识符,而无需使用AND运算符。旨在帮助您删除具有多个相同列的行。

选项2:使用中间表删除重复的行

您可以创建一个中间表并将其用于删除重复的行。通过仅将唯一的行传输到新创建的表并删除原始表(剩下的重复行)来完成此操作。

为此,请按照以下说明进行操作。

1.创建一个与源表具有相同结构的中间表,并传输在源表中找到的唯一行:

CREATE TABLE [copy_of_source] SELECT DISTINCT [columns] FROM [source_table];

例如,要创建样本表结构的副本,dates命令为:

CREATE TABLE copy_of_dates SELECT DISTINCT id, day, month, year FROM dates;

2.完成后,您可以删除源表并重命名新表:

DROP TABLE [source_table]; ALTER TABLE [copy_of_source] RENAME TO [source_table];

例如:

DROP TABLE dates; ALTER TABLE copy_of_dates RENAME TO dates; 选项3:使用ROW_NUMBER()删除重复的行

重要说明:此方法仅适用于MySQL8.02及更高版本。尝试此方法之前,请检查MySQL版本。

删除重复行的另一种方法是使用ROW_NUMBER()函数。

SELECT *. ROW_NUMBER () Over (PARTITION BY [column] ORDER BY [column]) as [row_number_name];

因此,示例表的命令为:

SELECT *. ROW_NUMBER () Over (PARTITION BY id ORDER BY id) as row_number;

结果包括一个row_number列。数据按ID划分,并且在每个分区中都有唯一的行号。唯一值被标以行号1,而重复是2,3,依此类推。

因此,要删除重复的行,您需要删除除标有1的行以外的所有内容。这是通过运行以作为过滤器的DELETE查询来完成的row_number。

要删除重复的行,请运行:

DELETE FROM [table_name] WHERE row_number > 1;

在我们的示例日期表中,命令为:

DELETE FROM dates WHERE row_number > 1;

输出将告诉您有多少行受到影响,即删除了多少重复的行。

您可以通过运行以下命令来验证没有重复的行:

SELECT * FROM [table_name];

例如:

SELECT * FROM dates;

总结

现在,您应该能够在MySQL中删除重复的行并提高数据库性能。请记住,MySQL严格模式的新实现限制了所需功能的功能。

关于MySQL中删除重复的行的方法就介绍到这,上述SQL语句具有一定的参考价值,需要的朋友可以了解看看。最后,想要了解更多MySQL数据库的操作,大家可以关注其它的相关文章。

文本转载自网络

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: MySQL中删除重复的行的方法和操作是什么?
本文地址: https://pptw.com/jishu/652005.html
php如何将两个最大值找出来,并且相加 浅谈MySQL数据库经典错误示例及解决方案

游客 回复需填写必要信息