1. 程式人生 > >mysql刪除重複記錄,保留最小id的理解

mysql刪除重複記錄,保留最小id的理解

我有一張資料表sw_goods,裡面儲存了goods_id,goods_name欄位,其中goods_id欄位為自增主鍵,goods_name欄位裡面有 重複的記錄。
我希望刪除goods_name欄位的重複記錄。
思路1:
在原表上直接操作:通過主鍵刪除重複記錄
1.先查詢id最小的重複記錄
SELECT MIN(goods_id )FROM sw_goods GROUP BY goods_name ;
2.刪除
DELETE goods_id FROM sw_goods WHERE goods_id NOT IN (SELECT MIN(goods_id) FROM sw_goods GROUP BY goods_name) ;

可是報錯了:
ERROR 1093 (HY000): You can’t specify target table ‘student’ for update in FROM clause
原因是:更新資料時使用了查詢,而查詢的資料又做了更新的條件,mysql不支援這種方式。
如何規避這種問題?
再加一層封裝:
DELETE FROM sw_goods WHERE goods_id NOT IN (SELECT minid FROM (SELECT MIN(goods_id )FROM sw_goods GROUP BY goods_name ) AS b);
執行成功。

思路2:
按goods_name分組,把最小的id儲存到臨時表,刪除id不在最小id集合的記錄,如下:
1.建立臨時表
CREATE TEMPORARY TABLE tmp_name AS SELECT MIN(goods_id) AS minid FROM sw_goods GROUP BY goods_name;
2.執行刪除
DELETE FROM sw_goods WHERE goods_id NOT IN (SELECT minid FROM temp_name);