MySql 刪除表中重複的資料(但要保留一條)
阿新 • • 發佈:2019-02-17
今天遇到一個問題。相同的資料在同一張表裡出現了多次。我的需求是刪除多餘的資料,但要保留其中一條。
定義 表明 table_a ,判斷唯一的兩個欄位 c_1,c_2,無關欄位data
表中原始資料如下
首先我們要檢視資料庫中那些資料重複了,執行如下SQL
SELECT * FROM
(SELECT COUNT(*) as num,c_1,c_2 FROM table_a GROUP BY c_1,c_2)e
WHERE e.num>1;
結果如下
其中num欄位為 資料出現的次數,可以發現我們已經找出了出現重複的資料,那麼我們該怎麼去除其中多餘的資料呢。
我的思路是:再查詢一個id 欄位 ,我們group by 的時候 id 欄位只能查詢到重複資料中的一條。然後我們把這些id的資料刪除,就達到了去重的效果。SQL 如下
DELETE FROM table_a
WHERE id IN
(SELECT e.id FROM (SELECT id,COUNT(*) as num,c_1,c_2 FROM table_a GROUP BY c_1,c_2)e WHERE e.num>1);
2018-01-20 更新:
突然想到一個更好的方法,SQL如下:
DELETE FROM table_a
WHERE id IN
(SELECT id FROM (SELECT id FROM table_a GROUP BY c_1,c_2 HAVING count(*) > 1)e);
執行:
可以看到有兩行被刪除了。這時再看看資料表,資料已經變成了:
成功將重複的資料刪除。
如果重複資料是三條或者更多怎麼辦呢?很簡單,再多執行幾次這個SQL 就好了。
最後,別忘了給欄位加個唯一索引,避免資料再出問題