mysql - 如何在保留至少一行的同时删除重复的 MySQL 表行

标签 mysql

我有四列都是 varchar(x)

  • 经销商编号
  • 名字
  • 姓氏
  • 街道地址

然后我有一个名为 SystemId 的自动递增的 int 列。

我想做的是删除表中 4 列匹配的所有行,但我想保留具有最大自动递增 ID 的行。

例如

SystemId|DealerId|FirstName|LastName|StreetAddress
1|Hello|Mike|Tola|1923 somewhere dr
2|Hello|Mike|Tola|1923 somewhere dr

在上面的示例中,我想删除 SystemId 1 并保留 SystemId 2。我有大约 300k 行,所以不可能一一获取这些 ID。

最佳答案

您可以使用直接连接:

delete t2
from mytable t
join mytable t2 on t.dealerid = t2.dealerid
  and t.firstname = t2.firstname
  and t.lastname = t2.lastname
  and t.streetaddress = t2.streetaddress
  and t.systemid > t2.systemid

参见 SQL Fiddle

诀窍是比较 t.systemid > t2.systemid,它保持最高(最后添加)的 id。

关于mysql - 如何在保留至少一行的同时删除重复的 MySQL 表行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23582774/

相关文章:

php - 多个 MySQL DELETE 禁用电子邮件通知

mysql - 在 MySQL 中创建过程来插入数据的正确语法是什么?

MySQL 更新查询?

mysql - NodeJS Mysql 模块在远程数据库上抛出 ETIMEDOUT 错误

sql - 如何根据其他行中的值选择行

Mac OS X 10.8 上的 MySQL ODBC

mysql - 在更新后触发器中使用 OLD 变量时出现问题

php - 刚接触 PDO 函数却什么也没做?

php - 尝试与房间匹配

php - 我正在尝试设置类,但在第 41 行不断收到错误 "num_rows line"错误是 "Trying to get property of non-object in line 41"