SQL查看所有重复项?

时间:2012-07-06 12:29:35

标签: mysql sql

我有一张包含数千行的大桌子。每行都有一个唯一的路径。例如:

electronics/samsung/tv/lcd-23384
electronics/philips/tv/lcd-12ger
etc...

问题是,最近的查询执行不正确,导致某些字段具有重复路径。所以,我想知道的是,是否有一个查询我可以执行以显示所有重复项?换句话说,如果我有这个:

ID     | PATH 
1      | path_1
2      | path_2
3      | path_3
4      | path_3
5      | path_3
6      | path_4
7      | path_4
8      | path_5
9      | path_6

我想要这个结果:

ID     | PATH 
3      | path_3
4      | path_3
5      | path_3
6      | path_4
7      | path_4

请注意,已删除所有非重复项。即......这些:

ID     | PATH 
1      | path_1
2      | path_2
8      | path_5
9      | path_6

什么SQL查询可以实现此目的?

4 个答案:

答案 0 :(得分:4)

SELECT * FROM mytable NATURAL JOIN (
  SELECT PATH FROM mytable GROUP BY PATH HAVING COUNT(*) > 1
) dupes

sqlfiddle上查看。


要在以下评论中执行您要求的更新:

UPDATE mytable NATURAL JOIN (
  SELECT PATH FROM mytable GROUP BY PATH HAVING COUNT(*) > 1
) dupes, (SELECT @r:=0) init
SET mytable.PATH = CONCAT(PATH, '-', @r:=@r+1);

sqlfiddle上查看。

答案 1 :(得分:0)

试试这个,替换所需的表格和列值:

SELECT YourColumn, COUNT(*) TotalCount
  FROM YourTable
 GROUP BY YourColumn
HAVING COUNT(*) > 1
 ORDER BY COUNT(*) DESC

答案 2 :(得分:0)

您可以使用此类查询

查看所有重复项
SELECT * FROM YourTable WHERE Path in
  (SELECT PATH
   FROM YourTable
   GROUP BY PATH
   HAVING COUNT(*)>1)

您想删除哪种行?

答案 3 :(得分:0)

它将为您提供所有重复的结果

select column_name, count(column_name) occurrence from table_name 
group by column_name having count(column_name) > 1;

如果你想获得所有非重复的结果..

select column_name, count(column_name) occurrence from table_name 
group by column_name having count(column_name) = 1;