0

我想对表中的所有条目进行报告,其中一列有重复条目。假设我们有一个这样的表:

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 + 行,而且它会永远存在!有人有更好的方法来做到这一点吗?

谢谢!

4

2 回答 2

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如果您希望查询快速,请确保您的表有一个索引。

于 2012-08-15T14:31:39.647 回答
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
于 2012-08-15T14:34:54.180 回答