使用mysql查询删除表中的重复条目

时间:2015-05-07 13:18:29

标签: mysql sql database duplicate-removal

在我的数据库中有一个包含冗余数据的表。这意味着它在多行中多次具有相同的数据。

我想删除所有冗余数据并只保留一条记录。问题是我的表现在没有主键或唯一键。但我有数据。

你能给我一个删除所有重复行的MySQL查询的例子吗?

DELETE 
FROM enr_money_handover_detail 
WHERE lastupdate IN (
                      SELECT lastupdate 
                      FROM enr_money_handover_detail 
                      GROUP BY lastupdate); 

这显示错误,如

  

您无法指定目标表' enr_money_handover_detail'用于FROM子句中的更新"。

3 个答案:

答案 0 :(得分:2)

SELECT DISTINCT是你的朋友。创建一个新表,并使用旧表中的select distinct从查询中插入。

答案 1 :(得分:2)

我认为您需要将当前表中所有不同记录的副本复制到其他表(备份)。

然后截断原始表,然后将备份表中的记录复制回原始表。

下面的命令将帮助您实现它。

CREATE TABLE handover_backup SELECT DISTINCT * FROM enr_money_handover_detail;

TRUNCATE TABLE enr_money_handover_detail;

INSERT INTO enr_money_handover_detail SELECT * FROM handover_backup; 

希望这会对你有所帮助。

答案 2 :(得分:-1)

正如其他人所说,您可以使用Select Distinct,并以这种方式使用简单的删除查询:

DELETE FROM enr_money_handover_detail WHERE lastupdate IN (SELECT DISTINCT(lastupdate) FROM enr_money_handover_detail);