首頁  >  文章  >  資料庫  >  資料庫根據指定欄位去重

資料庫根據指定欄位去重

步履不停
步履不停原創
2019-06-19 13:14:597176瀏覽

資料庫根據指定欄位去重

需求:對一張使用者表根據name/email/card_num欄位移除重複資料;

##想法:用group by方法可以查詢出'去重'後的數據,將這些數據存儲到一張臨時表中,然後將臨時表的數據存儲到指定的表中;

##誤區及解決方案:

group by方法只能取得部分欄位(去重指定欄位),不能一次取得到完整的數據,但是可以透過max函數取得group by結果集中的id,再根據id集合查詢出全部的記錄。 測試思路

查詢去重後的資料
#SELECT max(id) as id,name,email,card_num FROM users GROUP BY name,email,card_num;

從去重後的資料取得id集合
SELECT ID from (SELECT max(id ) as id,name,email,card_num FROM users  GROUP BY name,email,card_num) as T;

根據去重後的資料中取得id集合,從來源資料取得記錄清單
SELECT * from users  where id in (SELECT ID from (SELECT max(id) as id,name,email,card_num FROM users GROUP BY name,email,card_num) as T);

實際方法

根據去重後的資料中取得id集合,從來源資料中取得記錄列表,將這些清單資料存入一個臨時表中
create TEMP TABLE tmp_data as SELECT * from users where id in (SELECT ID from (SELECT max(id) as id,name,email,card_num FROM users GROUP BY name, email,card_num) as T);

將暫存表中的資料存入指定的資料表中,完畢
  • ##insert into users_copy1 select * from tmp_data;

偵測

偵測結果是不是和第一步查詢去重後的資料總數相同

  • ##偵測結果是不是和第一步查詢去重後的資料總數相同

select count(*) from users_copy1;

測試結果:1.4w條資料中有2300個資料重複,實際運行結果為0.7s,基本上滿足現在的需求。

更多MySQL相關技術文章,請造訪MySQL教學##欄位學習!

以上是資料庫根據指定欄位去重的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn