我有一张包含数千行的大桌子。每行都有一个唯一的路径。例如:
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查询可以实现此目的?
答案 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;