您现在的位置是:群英 > 数据库 > MySQL数据库
MySQL中删除重复的行的方法和操作是什么?
Admin发表于 2021-11-25 17:48:3743 次浏览

    这篇文章我们来了解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()删除重复的行

    重要说明:此方法仅适用于MySQL 8.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数据库的操作,大家可以关注其它的相关文章。

文本转载自网络

相关信息推荐
2021-11-08 15:42:32 
摘要:这篇文章小编给大家分享的是oracle慢查询的内容,下文介绍了oracle慢查询的方法,文中示例介绍的很详细,感兴趣的朋友可以了解看看,下面让我们一起来学习一下吧!
2021-11-12 18:02:09 
摘要:这篇文章主要介绍MySQL如何创建表外键约束,MySQL数据库中创建表外键约束是很基础的操作,也很好理解,但是有几点创建表外键约束的规则大家需要注意,接下来我们就一起来了解一下MySQL创建表外键约束以及创建规则。
2021-12-01 10:56:27 
摘要:这篇文章给大家分享一些MySQL数据库入门的基础知识。小编觉得挺实用的,对新手学习MySQL数据库有一定的帮助,因此分享给大家做个参考,文中介绍的非常详细,感兴趣的朋友接下来一起跟随小编看看吧。
群英网络助力开启安全的云计算之旅
立即注册,领取新人大礼包
  • 联系我们
  • 24小时售后:4006784567
  • 24小时TEL :0668-2555666
  • 售前咨询TEL:400-678-4567

  • 官方微信

    官方微信
Copyright  ©  QY  Network  Company  Ltd. All  Rights  Reserved. 2003-2019  群英网络  版权所有   茂名市群英网络有限公司
增值电信经营许可证 : B1.B2-20140078   粤ICP备09006778号
免费拨打  400-678-4567
免费拨打  400-678-4567 免费拨打 400-678-4567 或 0668-2555555
微信公众号
返回顶部
返回顶部 返回顶部