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