我有下表,现在我需要删除有重复“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/

10-10 02:25