mysql 删除重复数据_MySQL查找和删除重复数据
如何從MySQL中刪除重復數據,只保留一條呢?
假設有如下一個數據表:
mysql > SELECT * FROM users;
+----+--------+
| id | name |
+----+--------+
| 1 | google |
| 2 | yahoo |
| 3 | msn |
| 4 | google |
| 5 | google |
| 6 | yahoo |
+----+--------+
后面3條都是重復的數據,如何用一條命令刪掉這些重復數據呢?
1 查詢重復記錄數量
查詢全部重復記錄:
SELECT * FROM users as a WHERE EXISTS (SELECT 1 FROM users as b WHERE b.name = a.name LIMIT 1, 1) order by name;
查詢重復記錄和最小id:
SELECT min(id), name, count(*) as c FROM users group by name having c > 1;
查詢重復記錄和最大id:
SELECT max(id), name, count(*) as c FROM users group by name having c > 1;
兩個方法的區別就是一個用了min()函數,一個用了max()函數。
2 保留id最小的記錄
刪除重復記錄,保留id最小的記錄,命令:
DELETE n1 FROM users n1, users n2 WHERE n1.id > n2.id AND n1.name = n2.name
執行結果就是:
mysql > SELECT * FROM users;
+----+--------+
| id | name |
+----+--------+
| 1 | google |
| 2 | yahoo |
| 3 | msn |
+----+--------+
3 保留id最大的記錄
刪除重復記錄,保留id最大的記錄,命令:
DELETE n1 FROM users n1, users n2 WHERE n1.id < n2.id AND n1.name = n2.name
執行結果就是:
mysql > SELECT * FROM users;
+----+--------+
| id | name |
+----+--------+
| 3 | msn |
| 5 | google |
| 6 | yahoo |
+----+--------+
參考資料:
總結
以上是生活随笔為你收集整理的mysql 删除重复数据_MySQL查找和删除重复数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql blob 字段_MySQL中
- 下一篇: 大众点评新logo用caxa怎么画