📜  mysql 删除重复行但保留一个 - SQL (1)

📅  最后修改于: 2023-12-03 15:03:06.186000             🧑  作者: Mango

MySQL 删除重复行但保留一个 - SQL

在实际开发中,我们经常需要在 MySQL 数据库中删除重复行,但是保留其中一个。本文将介绍几种方法来实现这个需求。

1. 使用 DISTINCT 和临时表
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 表。

2. 使用 GROUP BY 和 MAX 函数
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 语句删除除了这些保留行以外的其它行。

3. 使用子查询和 NOT IN 子句
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 语句应根据实际情况进行调整。在执行任何数据删除操作前,请谨慎备份数据!