【数据库】Mysql删除重复记录只保留一条
生活随笔
收集整理的這篇文章主要介紹了
【数据库】Mysql删除重复记录只保留一条
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
實際工作中,有可能會對數據庫中的數據進行再次加工。假設有個表記錄的是技術文章,有三個字段:st_link(文章鏈接)、st_title(文章章節標題)、st_name(文章名稱)
假設初始時主鍵為st_link,會出現1個st_title對應多個st_link的情況。但是后面發現其實一個st_title不同st_link里面的內容都一樣,現在需要將每個st_title只保留一個st_link,并且將st_title作為主鍵。
下面說一下具體實現步驟:
1. 先查找出st_title有多個st_link的情況
select st_link from SIS_story where st_title in(select st_title from SIS_story group by st_title having count(*)>1);2.查出每個st_title需要保留一條st_link的記錄,這里保留排序小的那一條
select min(st_link) from SIS_story group by st_title having count(*)>;3.上面兩步合并,查出需要刪除的記錄
select st_link from SIS_story where st_title in(select st_title from SIS_story group by st_title having count(*)>1)and st_link not in (select min(st_link) from SIS_story group by st_title having count(*)>1)4.上面查出來的是 針對st_title有多個st_link的情況,過濾需要保留的記錄。這時是不是可以直接刪除數據了呢?這時候是不能直接刪除的,需要將查詢信息放到一個臨時表:
select st_link from (select st_link from SIS_story where st_title in(select st_title from SIS_story group by st_title having count(*)>1)and st_link not in (select min(st_link) from SIS_story group by st_title having count(*)>1)) as t5.最后再進行刪除操作
delete from SIS_story where st_link in (select st_link from (select st_link from SIS_story where st_title in(select st_title from SIS_story group by st_title having count(*)>1)and st_link not in (select min(st_link) from SIS_story group by st_title having count(*)>1)) as t );?
?
總結
以上是生活随笔為你收集整理的【数据库】Mysql删除重复记录只保留一条的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: No module named 'cri
- 下一篇: mysql安装版安装