📅  最后修改于: 2023-12-03 15:20:16.588000             🧑  作者: Mango
在 SQL 中,我们经常会遇到需要删除重复的行数据的情况,但又希望保留其中的一个。这可以通过使用 SQL 的 DELETE
和子查询来实现。
下面是一个基本的用法示例:
DELETE FROM table_name
WHERE column_name NOT IN (
SELECT MIN(column_name)
FROM table_name
GROUP BY column_name
);
在上述示例中,我们使用一个子查询来获取每个重复行中的最小值,并将其保留。主要的步骤包括:
GROUP BY
子句按照指定的列名进行分组。MIN
函数获取每个分组中的最小值。NOT IN
操作符来筛选出不在最小值列表中的行。DELETE
语句删除满足条件的行。请注意,上述示例中的 table_name
和 column_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_name
和 other_column
进行分组,并保留每个分组中的最小 ID
。
请记住,在进行任何删除操作之前,请先备份你的数据,以防不可预料的情况发生。