mysql - 根据一列值删除重复行

标签 mysql sql

我有下表,现在我需要删除具有重复“refID”但至少有一行包含该 ref 的行,即我需要删除第 4 行和第 5 行。请帮我解决这个问题

+----+-------+--------+--+
| ID | refID |  data  |  |
+----+-------+--------+--+
|  1 |  1023 | aaaaaa |  |
|  2 |  1024 | bbbbbb |  |
|  3 |  1025 | cccccc |  |
|  4 |  1023 | ffffff |  |
|  5 |  1023 | gggggg |  |
|  6 |  1022 | rrrrrr |  |
+----+-------+--------+--+

最佳答案

这类似于 Gordon Linoff 的查询,但没有子查询:

DELETE t1 FROM table t1
  JOIN table t2
  ON t2.refID = t1.refID
  AND t2.ID < t1.ID

这使用内部联接仅删除存在具有相同 refID 但较低 ID 的另一行的行。

避免子查询的好处是能够利用索引进行搜索。此查询应该在 refID + ID 上使用多列索引时表现良好。

关于mysql - 根据一列值删除重复行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28432093/

相关文章:

mysql - 如何 INSERT 或 UPDATE 大量行(关于表的 auto_increment 值)

php - 在不求助于 mysql_insert_id() 的情况下,在单个查询中将 SQL 关系插入到 2 个表

php - 有没有办法只为 MySQL 中的一个字段显示 WHERE 子句?

php - 使用 mysql/php 中的 id/parent_id 模型获取记录的所有父项的最简单方法是什么?

php - MySQL结果多个数组

php - 显示来自连接的数据?

sql - 在 SQL Server 中将两列相乘

mysql - 获取整个表内容的单元测试 SQL 查询

sql - 如何选择多列同时保持其中一列不同

mysql - 时间计算(到下一个时段的回合时间)