面試題中經常遇到的SQL題:刪除重復數據,保留其中一條


    如題,解決思路如下:

    1、首先我們需要找出擁有重復數據的記錄

1 ---以name字段分組
2 select Name,COUNT(Name) as [count] from Permission group by Name-- having COUNT(Name)>1
3 
4 ---以name字段分組,篩選出有重復出現的字段 having 用於條件篩選 作用相當於where 區別where用於group by 之前,having用於之后
5 select Name,COUNT(Name) as [count] from Permission group by Name having COUNT(Name)>1
查找擁有重復記錄的數據

    執行結果:

    

   2、然后我們需要知道要要保留的記錄的ID號,或者其他唯一標識字段

1 ---獲取重復記錄中最小的一項的ID號
2 select min(ID),Name,COUNT(Name) as [count] from Permission group by Name having COUNT(Name)>1
獲取需要保留記錄的ID編號

   執行結果:

    

   3、組合前面兩個數據查詢條件,進行刪除操作

1 ---刪除重復數據
2 delete from Permission 
3 ---找出擁有相同數據的記錄
4 where Name in (select Name from Permission group by Name having COUNT(Name)>1)
5 ---除了最小ID號的數據保留,其他的刪除 (也可以用max(id))
6 and ID not in (select min(ID) from Permission group by Name having COUNT(Name)>1)
刪除重復數據,保留其中一條

 


免責聲明!

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



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