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


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語句,竟然可以解決這么復雜的問題,漲姿勢了~不得不佩服思路啊!

又找到一條SQL實現去重保留一條記錄,分享給大家:

delete from cqssc where id in (select id from (select id from cqssc where expect in (select expect from cqssc group by expect having count(expect)>1) and id not in(select min(id) from cqssc group by expect having count(expect)>1)) as tmpresult)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM