2011-07-27 42 views
1

在我的表,我有以下欄目:我可以提取在sql中重複的提取記錄嗎?

id|name|gender 

我想提取所有被複制的名字,但我不想掃描所有的數據庫進行逐一統計每個記錄.. 。我只是想知道誰具有相同的名稱... 例如:

0|mary|F 
1|tom|M 
2|peter|M 
3|mary|F 
4|chris|M 
5|chris|F 
6|alex|M 

我只是想:瑪麗和克里斯... 但我不想一次閱讀完所有記錄... 有任何想法嗎?謝謝。

回答

7
SELECT 
    name 
FROM 
    Mytable 
GROUP BY 
    name 
HAVING 
    COUNT(*) > 1 

過於分開性別,更改GROUP BY到name, gender

要刪除重複的行

DELETE MyTable 
WHERE ID NOT IN 
    (
    SELECT 
     MIN(Id) 
    FROM 
     Mytable 
    GROUP BY 
     name 
    ) 
+0

+1。回答並提供了還原劑數據的解決方案 – niktrs

2

這是你在找什麼?

select name from tbl 
group by name 
having count(*) > 1 
1

按我的理解,你從你的陳述意味着你做什麼希望一次讀取所有記錄的方式是希望查詢以塊的形式查找重複的名稱。

如果我的理解是正確的,那麼你可以批量運行查詢使用id作爲分隔符即ie。首先運行1000條記錄的查詢,然後運行1000到2000之間的記錄查詢,然後運行2000到3000條之間的記錄。

但是有一個問題,當你不想一次讀取所有記錄時:可能發生該名稱在您已拾取的塊中是唯一的,但仍可以是整個表中的副本,即名稱在記錄1000和2000之間可以是唯一的,但可以在記錄4000和5000之間發生。