📜  识别具有 2 个相同列值的行并删除重复的 mysql (1)

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

识别具有 2 个相同列值的行并删除重复的 MySQL

在 MySQL 数据库中,经常需要识别具有 2 个相同列值的行,并将它们删除以消除重复。以下是一些可能用到的方法和代码片段。

1. 用 GROUP BY 和 HAVING 识别重复的行

一个常见的方法是使用 GROUP BY 和 HAVING 子句识别重复的行,并使用 DELETE 语句将它们从表中删除。

DELETE FROM table_name 
WHERE col_name IN (
  SELECT col_name 
  FROM table_name 
  GROUP BY col_name 
  HAVING COUNT(*) > 1
);

这个代码片段会查找表中具有重复 col_name 值的行,并将它们从表中删除。请注意,其中的子查询先使用 GROUP BY 后跟 HAVING 子句,以查找重复的行。然后,主查询使用 DELETE 从表中删除这些行。

2. 用 INNER JOIN 和子查询识别重复的行

另一个方法是使用 INNER JOIN 和子查询来识别重复的行。

DELETE t1 
FROM table_name t1 
INNER JOIN (
  SELECT col_name 
  FROM table_name 
  GROUP BY col_name 
  HAVING COUNT(*) > 1
) t2 ON t1.col_name = t2.col_name;

这个代码片段也会查找具有重复 col_name 值的行,并将它们从表中删除。请注意,这里使用 INNER JOIN 和子查询找到重复的行。然后,主查询使用 DELETE 从表中删除这些行。

结论

无论你使用哪种方法,都应该能够很容易地识别并删除具有 2 个相同列值的重复行。请注意,如果你需要保留其中一个副本,请先使用 SELECT 语句查找这些行,然后手动删除或更新表中的单个副本。