SQL删除重复数据方法


一、2条及2条以内的重复

问题

如图有两列,第一列是主键,第二列是产品编码,其中产品编码有重复数据,我现在需要删除这部分编码重复的数据

 

方法

利用having +聚合函数

SELECT MIN(FID) FID,FProductCode FROM #table
where FDate='2022-04-20' GROUP BY FProductCode
HAVING COUNT(1) >  1

查询出来的就是一半的重复数据

 

实现

删除重复数据

--删除重复数据
update #table set FDelete=1,exchange_status=0
where FID IN(
SELECT MIN(FID) FID,FProductCode FROM #table
where FDate='2022-04-20'
GROUP BY FProductCode
HAVING COUNT(1) >  1
)

 

----------------------------------------------------------------------------------

二、大于2条的重复

 

 如图所示:这种情况下如何去重呢?

一句话概括:查找表中所有重复的数据编码,且这部分编码的主键不是最小值的那个

--1、查询所有去重后的编码
--2、查询这些去重后的编码的主键FID
--即:根据单字段,删除表中该字段重复出现记录,保留最小主键ID
UPDATE   MY_SP_StereoScopicStock  SET FDelete=1,exchange_status=0 
WHERE  FDate='2022-05-30' AND FProductCode IN
(SELECT FProductCode FROM MY_SP_StereoScopicStock
where FDate='2022-05-30'
GROUP BY FProductCode HAVING COUNT(FProductCode) > 1
)
AND FID NOT IN
(SELECT MIN(FID) FROM MY_SP_StereoScopicStock
where FDate='2022-05-30'
GROUP BY FProductCode HAVING COUNT(FProductCode)>1)

 

  

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM