📜  删除所有重复的行保留最新的,除了 mysql 中的一个 (1)

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

删除所有重复的行保留最新的

在许多情况下,我们会需要从数据库中删除重复的行,但保留最新的行。这种情况在 MySQL 中也很常见,虽然它的语法可能与其他数据库不同。

为了完成这一任务,我们可以使用以下步骤:

  1. 创建一个临时表 temp_table,将数据从原始表 original_table 复制到该表中:
CREATE TEMPORARY TABLE temp_table LIKE original_table;
INSERT INTO temp_table
SELECT DISTINCT t1.* FROM original_table t1
INNER JOIN (
   SELECT id, MAX(date_added) AS max_date_added
   FROM original_table
   GROUP BY id
) t2 ON t1.id = t2.id AND t1.date_added = t2.max_date_added;

这些 SQL 语句将创建一个临时表 temp_table,并从 original_table中选择独特(即非重复)的行,并且各自都是每个 ID 组中的最新行。temp_table 现在包含所有唯一 ID 的最新行。

  1. 然后,我们需要从原始表中删除重复的行,并将唯一的、最新的行复制回该表,应该使用以下代码:
DELETE FROM original_table;
INSERT INTO original_table SELECT * FROM temp_table;

这些SQL 语句将删除原始表中的所有行,并从 temp_table 中将唯一的、最新的行复制回该表。

  1. 最后,删除临时表:
DROP TEMPORARY TABLE IF EXISTS temp_table;

这个语句将临时表 temp_table 删除(如果存在)。我们现在已经删除了所有重复的行,并保留了每个 ID 组中最新的行。

希望这个 SQL 解决方案能够帮助你处理 MySQL 数据库中的重复行问题。