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