MySQL刪除重復記錄只保留一條

jopen 10年前發布 | 418K 次閱讀 MySQL 數據庫服務器

刪除表中重復記錄,只保留一條:

delete from 表名 where 字段ID in (select * from (select max(字段ID) from 表名 group by 重復的字段 having count(重復的字段) > 1) as b);

實例:
2.當想要為某一個表建立一個唯一索引,由于表中有重復記錄而無法進行時,需要刪除重復記錄。
例表 dept

id_no            id_name 
       100              'AAA' 
       101              'BBB' 
       102              'CCC' 
       103              'DDD' 
       100              'EEE' 
       100              'FFF' 
       103              'GGG'

請寫一條(或一組)SQL語句,刪除重復的行,但重復的行中需要保留一行,
如上表,id_no=100需要刪除2行,保留一行,id_no=101需要刪除一行保留一行id_no=102和103則不刪

delete from dept where id_no not in ( select * from (select max(id_no) from dept group by id_no having count(id_no)>1) b);

以上轉自http://flyer0126.iteye.com/blog/497359

但是我的需求不太一樣,
| id | createTime | labId | pubId |
+—–+———————+——-+————————————–+
| 171 | 2014-05-22 21:49:11 | 1 | d4165953-2245-4b8c-b21d-8c08d519f66e |
| 172 | 2014-05-22 21:49:11 | 2 | d4165953-2245-4b8c-b21d-8c08d519f66e |
| 173 | 2014-05-22 21:49:11 | 6 | d4165953-2245-4b8c-b21d-8c08d519f66e |
| 174 | 2014-05-22 21:49:11 | 5 | d4165953-2245-4b8c-b21d-8c08d519f66e |
| 175 | 2014-05-22 21:49:11 | 2 | d4165953-2245-4b8c-b21d-8c08d519f66e |
| 176 | 2014-05-22 21:49:11 | 6 | d4165953-2245-4b8c-b21d-8c08d519f66e |
| 177 | 2014-05-22 21:49:11 | 5 | d4165953-2245-4b8c-b21d-8c08d519f66e |
| 178 | 2014-07-03 15:20:07 | 2 | d5308254-3b52-4ada-8e10-16b6a764c5e5 |
| 179 | 2014-07-03 15:36:00 | 2 | d4bc80b4-b57b-4049-9ab3-8f45102fae91 |
| 180 | 2014-07-04 21:05:26 | 4 | f8ccee8f-d93c-41cc-8d2f-28ada7ea4b07 |
我需要把labId和pubId相同的重復記錄刪掉,只要labId和pubId有一項不同就不算重復記錄。
delete from t_publishandlabel where id not in ( select * from(select id from t_publishandlabel group by pubId,labId)b);

來自:http://my.oschina.net/u/565871/blog/287582

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!