如何删除mysql数据库里的重复记录 无需创建临时表删除重复记录

mysql在导数据或者做一些记录时,经常会发现mysql中存储了一些相同的记录,而你又想要删除掉其中的一部份相同的记录,有些人可能会用到临时表或写程序来处理,今天我们将直接不创建临时表,直接使用mysql命令来删除掉相同的mysql记录方法。

mysql在导数据或者做一些记录时,经常会发现mysql中存储了一些相同的记录,而你又想要删除掉其中的一部份相同的记录,有些人可能会用到临时表或写程序来处理,今天我们将直接不创建临时表,直接使用mysql命令来删除掉相同的mysql记录方法。

今天无意导入几个测试数据,发现测试数据中,有很多数据记录是相同的,我现在就想删除掉这些数据,
如何查询数据相同记录呢?这个好说,以下语句就可以查看相同记录的了:

1 SELECT COUNT(*) AS c, key_word FROM search_keywrod GROUP BY key_word HAVING c > 1 

其中 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

posted @ 2012-09-12 22:18  luoxiake  阅读(686)  评论(0编辑  收藏  举报