在创建UNIQUE键之前如何找到重复的记录?

时间:2013-03-18 08:18:53

标签: mysql sql unique-constraint

我将在一个大的旧表(几十万行)中创建一个UNIQUE键来强制执行包含唯一数据的每一行。我不能只是创建索引,因为该表已经包含一些重复项。我不知道它包含多少重复项,或者是否需要重复项。简而言之,在我能够提出一个选择所有违反未来UNIQUE键的行的查询之前,我无法分析问题。

假设我的表格中包含字段 col_one col_two col_three col_four 。我未来的UNIQUE键将包含 col_two col_three 。如何选择表格中 col_two col_three 在同一个表格中有重复的所有行?

1 个答案:

答案 0 :(得分:4)

使用小组。

SELECT 
  col_two,
  col_three,
  COUNT (*) AS `num_dupes`
FROM
  your_table
GROUP BY
  col_two,
  col_three
HAVING 
  COUNT(*) > 1 -- Only return results where there is at least one duplicate.

如果您希望查看表中存在重复项的所有结果,您可以从这些结果加入到表中:

SELECT
  your_table.*
FROM
  your_table
    INNER JOIN 
    (SELECT 
      col_two,
      col_three,
      COUNT (*) AS `num_dupes`
    FROM
      your_table
    GROUP BY
      col_two,
      col_three
    HAVING 
      COUNT(*) > 1) dupes 
      ON your_table.col_two = dupes.col_two AND
         your_table.col_three = dupes.col_three