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

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

SQL 删除重复行但保留一个

在 SQL 中,我们经常会遇到需要删除重复的行数据的情况,但又希望保留其中的一个。这可以通过使用 SQL 的 DELETE 和子查询来实现。

下面是一个基本的用法示例:

DELETE FROM table_name
WHERE column_name NOT IN (
    SELECT MIN(column_name)
    FROM table_name
    GROUP BY column_name
);

在上述示例中,我们使用一个子查询来获取每个重复行中的最小值,并将其保留。主要的步骤包括:

  1. 使用 GROUP BY 子句按照指定的列名进行分组。
  2. 使用 MIN 函数获取每个分组中的最小值。
  3. 使用 NOT IN 操作符来筛选出不在最小值列表中的行。
  4. 使用 DELETE 语句删除满足条件的行。

请注意,上述示例中的 table_namecolumn_name 需要根据实际情况进行替换。

如果你希望保留的是最后一行而不是第一行,则可以使用 MAX 函数来替代 MIN 函数。

DELETE FROM table_name
WHERE column_name NOT IN (
    SELECT MAX(column_name)
    FROM table_name
    GROUP BY column_name
);

此外,你还可以根据其他条件进行筛选,以便更精确地删除重复行。例如,你可以添加一个额外的条件来限制删除的范围:

DELETE FROM table_name
WHERE ID NOT IN (
    SELECT MIN(ID)
    FROM table_name
    GROUP BY column_name, other_column
);

在上述示例中,我们根据列 column_nameother_column 进行分组,并保留每个分组中的最小 ID

请记住,在进行任何删除操作之前,请先备份你的数据,以防不可预料的情况发生。