2012-08-15 63 views
0

我想报告表中所有条目中一列有重复条目的情况。假设我们有一个表是这样的:mysql在查找重复项时获取所有记录

customer_name  | some_number 
Tom     1 
Steve    3 
Chris    4 
Tim     3 
... 

我想告诉所有具有some_number为重复的记录。我已经使用了这样的查询显示所有重复的记录:

select customer_name, some_number from table where some_number in (select some_number from table group by some_number having count(*) > 1) order by some_number; 

这适用于一个小桌子,但一个我真正需要操作上是相当大的。 30,000多排,它是永远!有人有更好的方法来做到这一点?

谢谢!

回答

1

尝试此查询:

SELECT t1.* 
FROM (SELECT some_number, COUNT(*) AS nb 
     FROM your_table 
     GROUP BY some_number 
     HAVING nb>1 
    ) t2, your_table t1 
WHERE t1.some_number=t2.some_number 

查询首先使用GROUP BY找到重复的记录,然后与表联接检索所有领域。
由于使用了HAVING,它将只返回您感兴趣的记录,然后通过your_table进行加入。

如果您希望查询速度很快,请确保您的表格有some_number的索引。

+0

它看起来像这样的作品有点快。 – 2012-08-15 15:36:37

+1

我添加了一个解释,为什么这样做更快。 – Jocelyn 2012-08-15 15:38:59

1

这是否表现更好?它加入对some_number计数表,然后过滤器只包括那些有count> 1.

SELECT t.customer_name, t.some_number 
FROM my_table t 
INNER JOIN (
    SELECT some_number, COUNT(*) AS ct 
    FROM my_table 
    GROUP BY some_number) dup ON t.some_number = dup.some_number 
WHERE dup.ct > 1 
+0

是的,它的工作速度非常快 – 2012-08-15 14:54:04