2012-08-15 40 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