📅  最后修改于: 2023-12-03 15:03:06.186000             🧑  作者: Mango
在实际开发中,我们经常需要在 MySQL 数据库中删除重复行,但是保留其中一个。本文将介绍几种方法来实现这个需求。
CREATE TABLE temp_table AS SELECT DISTINCT * FROM table_name;
TRUNCATE table_name;
INSERT INTO table_name SELECT * FROM temp_table;
DROP TABLE temp_table;
以上 SQL 语句将创建一个名为 temp_table
的临时表,其中存储着 table_name
表中去重后的数据。然后清空 table_name
表中的数据,并将 temp_table
表中的数据重新插入到 table_name
表中,完成数据去重的操作。最后,删除 temp_table
表。
DELETE t1 FROM table_name t1, table_name t2
WHERE t1.id < t2.id AND t1.field_name = t2.field_name;
以上 SQL 语句将删除 table_name
表中除了 ID 最大的重复行以外的行。该 SQL 语句使用 GROUP BY
子句将数据按照 field_name
字段进行分组,并使用 MAX
函数获取每组中 id
最大的行(即保留的行)。最后,使用 DELETE
语句删除除了这些保留行以外的其它行。
DELETE FROM table_name
WHERE id NOT IN (SELECT min_id FROM (
SELECT MIN(id) min_id FROM table_name
GROUP BY field_name) t);
以上 SQL 语句将删除 table_name
表中除了每个分组中 id
最小的行以外的行。该 SQL 语句使用子查询获取每个分组中 id
最小的行,并使用 NOT IN
子句删除除了这些保留行以外的其它行。
注意:以上 SQL 语句仅供参考,具体的 SQL 语句应根据实际情况进行调整。在执行任何数据删除操作前,请谨慎备份数据!