天天看點

如何删除mysql資料庫裡的重複記錄 無需建立臨時表删除重複記錄

mysql在導資料或者做一些記錄時,經常會發現mysql中存儲了一些相同的記錄,而你又想要删除掉其中的一部份相同的記錄,有些人可能會用到臨時表或寫程式來處理,今天我們将直接不建立臨時表,直接使用mysql指令來删除掉相同的mysql記錄方法。

mysql在導資料或者做一些記錄時,經常會發現mysql中存儲了一些相同的記錄,而你又想要删除掉其中的一部份相同的記錄,有些人可能會用到臨時表或寫程式來處理,今天我們将直接不建立臨時表,直接使用mysql指令來删除掉相同的mysql記錄方法。

今天無意導入幾個測試資料,發現測試資料中,有很多資料記錄是相同的,我現在就想删除掉這些資料,

如何查詢資料相同記錄呢?這個好說,以下語句就可以檢視相同記錄的了:

其中 HAVING c >1 代表相同記錄數就有相同的了。

查詢相同的是比較容易實作的了,但是想要删除這些重複的,估計就比較麻煩的了,因為你是要删除自身表裡的記錄,有些朋友可能就會使用到臨時表,把相同需要删除的記錄,導到時這個臨時表,然後再通過臨時表來删除主表。或者寫一個臨時程式,删除掉其中的一條重複記錄。

以上二個方法删除重複記錄,最大的麻煩就是操作繁瑣。而我們今天介紹的就是利用MYSQL自身的語句,不建立臨時表,不寫程式來删除掉自身的重複記錄。請看以下SQL語句:

SELECT t1.id, t1.key_word   
FROM search_keywrod t1, (  
SELECT key_word, MIN(id) AS minid   
FROM search_keywrod   
GROUP BY key_word HAVING COUNT(key_word) > 1  
)t2   
WHERE t1.key_word = t2.key_word AND t1.id = t2.minid       

這條語句就跟我們第一條語句是一樣的功能,但是這條語句好處就是MIN(id),可以控制是删除大的id重複記錄(MAX),還是删除小的id重複記錄(MIN)。

OK,經過改良的語句實作了查詢,現在就可以利用DELETE FROM語句來删除了。

DELETE FROM search_keywrod WHERE id IN (SELECT id FROM (  
  
SELECT t1.id  
FROM search_keywrod t1, (  
SELECT key_word, MIN(id) AS minid FROM search_keywrod   
GROUP BY key_word HAVING COUNT(key_word) > 1  
)t2   
WHERE t1.key_word = t2.key_word AND t1.id = t2.minid  
  
)t3)        

執行時,請多執行幾次,因為每次删除時,隻删除掉重複的一次記錄,如果你一條記錄重複五次,那你就要執行五次的了。是以多執行幾次,直到沒有可删除的記錄了,這樣你直接一條語句删除掉重複的mysql記錄功能就實作了。

轉自:http://www.itokit.com/2012/0911/74740.html

轉載于:https://www.cnblogs.com/luoxiake/archive/2012/09/12/2682503.html