使用sql語句刪除數據庫中重復的數據


在數據庫中有一批數據,但是由於數據入庫之前某些不當的操作引入了一些重復的數據,需要將這些重復的數據刪除。數據的結構大概是下面的樣子

CREATE TABLE [dbo].[aaa](
    [id] [int] IDENTITY(1,1) NOT NULL,
    [fileName] [varchar](50) NULL,
    [fileSize] [int] NULL,
 CONSTRAINT [PK_aaa] PRIMARY KEY CLUSTERED 
(
    [id] ASC
) 
)

其中fileName和FileSize重復的時候表示數據重復

按照fileName和fileSize進行分組
select fileSize,fileName from tb group by filesize,filename
找出最大的那條記錄的id

上面的語句變成

select fileSize,fileName ,max(id) from tb group by filesize,filename
查找所有的id
select id from 
    (select fileSize,fileName ,max(id) id from tb group by filesize,filename ) a
刪除重復的數據
delete from tb where id not in ( 
    select id from 
         (select fileSize,fileName ,max(id) id from tb group by filesize,filename ) a
)

現在完成了重復數據的刪除,主要是利用了找出某個分組中最大的那個id,其中包括了所有不重復的id,然后使用not in將需要保留的排除。


免責聲明!

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



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