1. 程式人生 > 其它 >一條sql語句完成MySQL去重留保留一條記錄

一條sql語句完成MySQL去重留保留一條記錄

Mysql重複資料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;

上面這條sql語句,仔細看一下,揣摩出思路也不難,大概也分為3步來理解:

(SELECT min(id) id, user_id, monetary, consume_time FROM consum_record GROUP BY user_id, monetary, consume_time HAVING count(*) > 1 ) t2

查詢出重複記錄形成一個集合(臨時表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語句,竟然可以解決這麼複雜的問題,漲姿勢了~不得不佩服思路啊!