MySQL數據庫去重的方法
數據庫最近有很多重復的數據,數據量還有點大,本想着用代碼解決,后來發現用SQL就能解決,這里記錄一下
看這條SQL
DELETE consum_record
FROM
consum_record,
(
SELECT
min(id) id,
user_id,
monetary,
consume_time
FROM
consum_record
GROUP BY
user_id,
monetary,
consume_time
HAVING
count(*) > 1
) t2
WHERE
consum_record.user_id = t2.user_id
AND consum_record.monetary = t2.monetary
AND consum_record.consume_time = t2.consume_time
AND consum_record.id > t2.id;
首先是將重復的記錄查出來另存到一個集合(臨時表t2), 集合里是每種重復記錄的最小ID
consum_record.user_id = t2.user_id
AND consum_record.monetary = t2.monetary
AND consum_record.consume_time = t2.consume_time
AND consum_record.id > t2.id
這些關聯是判斷重復基准的字段
根據條件,刪除原表中id大於t2中id的記錄
到這里歡呼一句 SQL大法好
還是要多學習啊!SQL也不能拖后腿
但是在處理完成之后,數據庫中的主鍵id不是連續的了,強迫症犯了
下面是解決辦法:
我這邊處理方式是:先刪除主鍵id字段,然后再重新生成主鍵id字段