我有下表,现在我需要删除具有重复的“ refID”但至少有一行与该引用对应的行,即我需要删除第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上使用多列索引时应表现良好。