【发布时间】:2013-10-22 19:54:34
【问题描述】:
我需要从 MyISAM 格式的 MySQL 表中删除重复记录(仅保留一份)。我在 Stackoverflow 中阅读了许多关于类似问题的问题,但人们总是使用 ID 字段作为唯一 ID 或类似的,而我没有这个字段,因为我的“密钥”可能被复制。我想删除“Fecha”和“Equip”重复的行。
CREATE TABLE `pfc` (
`Fecha` datetime NOT NULL,
`Equip` int(10) unsigned NOT NULL,
`Value` double NOT NULL,
KEY `Fecha` (`Fecha`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AVG_ROW_LENGTH=21 ROW_FORMAT=FIXED;
一个示例表数据:
Fecha | Equip | Value
06/02/2011 0:00:11 | 22 | 29.0
06/02/2011 0:22:11 | 22 | 45.3
06/02/2011 0:00:11 | 22 | 29.0
结果应该是:
Fecha | Equip | Value
06/02/2011 0:00:11 | 22 | 29.0
06/02/2011 0:22:11 | 22 | 45.3
这种结构是不可能改变的。我不能使用 PRIMARY KEY 或 UNIQUE INDEX 解决方案。创建一个没有重复的临时表然后重命名也是一个糟糕的解决方案,因为 KEY 和另一个参数将会丢失。
谢谢
【问题讨论】:
-
为什么临时表不是一个糟糕的解决方案?您始终可以重新创建索引。另外,如果Equip和Fecha是重复的,如果值不同,应该选择什么值?
-
临时表可以工作,但不能将表“new_fc”创建为“Octopus-Paul”,然后将“new_pfc”重命名为“pfc”。如何使用临时表来解决问题?
-
你不必使用临时表,有更优雅的解决方案。
-
无温度。表是不可能的。您的表没有 id 并且 MySQL 不支持内部行 id。该表包含两个相同的行 - '06/02/2011 0:00:11|22|29.0'。如何指定应该删除的行?
-
@Devart - 你有 MySQL 不支持内部行 ID 的任何来源吗?仅供参考,这不取决于 MySQL,而是使用了存储引擎。