1. 程式人生 > >mysql中刪除重複記錄,並保留重複資料中的一條資料的SQL語句理解

mysql中刪除重複記錄,並保留重複資料中的一條資料的SQL語句理解

正好想寫一條刪除重複語句並保留一條資料的SQL,網上查了一部分資料寫的很詳細,但還是在這裡寫下自己的理解,以遍後續學習 。如下:

表字段和資料: 

SQL語句: 

DELETE FROM `user` WHERE id NOT IN(SELECT * FROM(SELECT id FROM `user` GROUP BY username)AS b)  

理解:

先從裡面的SQL開始看

1、SELECT id FROM `user` GROUP BY username  根據名字分組查詢出每組的ID。

2、SELECT * FROM(SELECT id FROM `user` GROUP BY username) AS b  這句話中有2個疑問點,

   第一、為什麼要套這樣一個select?因為 更新資料時使用了查詢,而查詢的資料又做更新的條件,mysql不支援這種方式

    如果不套上這個select查詢,那麼將會報1093 -  You can't specify target table 'user' for update in FROM clause錯誤。

第二、這句話中一定要取別名,不然會報1248 - Every derived table must have its own alias 錯誤

3、結合上面的分析來看一下整個的SQL語句理解,先將分組的ID查出來,然後刪除USER表中ID 不在分組ID中的資料,那麼就實現效果了。

delete from 表名 where  ID not in (select * from (select  id from 表名 group by 分組的列名)   別名)

效果如下:

轉自:http://blog.csdn.net/dsiori/article/details/52806709