SQL中刪除重複數據問題

2021-12-28 SQL資料庫開發

點擊關註上方「SQL資料庫開發」,

需求分析

資料庫中存在重複記錄,刪除保留其中一條(是否重複判斷基準為多個欄位)

解決方案

碰到這樣的問題我們先分解步驟來看

創建測試數據

找到重複的數據

刪除重複的數據並且保留一行

創建測試數據

我們創建一個人員信息表並在裡面插入一些重複的數據。

CREATE TABLE [dbo].[Person](
 [ID] [INT] IDENTITY(1,1) NOT NULL,
 [Name] [VARCHAR](20) NULL,
 [Age] [INT] NULL,
 [Address] [VARCHAR](20) NULL,
 [Sex] [CHAR](2) NULL
);

SET IDENTITY_INSERT [dbo].[Person] ON;
INSERT INTO [dbo].[Person] (ID,Name,Age,Address,Sex)
VALUES
( 1, '張三', 18, '北京路18號', '男' ),
( 2, '李四', 19, '北京路29號', '男' ),
( 3, '王五', 19, '南京路11號', '女' ),
( 4, '張三', 18, '北京路18號', '男' ),
( 5, '李四', 19, '北京路29號', '男' ),
( 6, '張三', 18, '北京路18號', '男' ),
( 7, '王五', 19, '南京路11號', '女' ),
( 8, '馬六', 18, '南京路19號', '女' );
SET IDENTITY_INSERT [dbo].[Person]  OFF;

(提示:可以左右滑動代碼)

建立好測試數據如下:

我們發現除了自增長ID不同以為,有幾條其他欄位都重複的數據出現,符合我們的需求。

找出重複的數據

SELECT MAX(ID) ID  ,
Name,Age,Address,Sex
FROM dbo.Person
GROUP BY Name,Age,Address,Sex
HAVING COUNT(1)>1

HAVING將分組後統計出來的數量大於1的數據行,就是我們要找的重複數據:

上面用Max函數或者Min函數均可,只是為了保證取出來的數據的唯一性。

刪除重複的數據

其實我們資料庫中最後要保留的結果就是第二步中查詢出來的數據,我們把其他的數據刪除即可。怎麼刪除呢?我們使用ID來排除。

DELETE  FROM Person
WHERE  EXISTS
(
SELECT * FROM (
SELECT
MAX(ID) ID,
Name,Age,Address,Sex
FROM dbo.Person
GROUP BY Name,Age,Address,Sex
HAVING COUNT(1)>1) T
WHERE Person.Name=T.Name
AND Person.Age=T.Age
AND Person.Address=T.Address
AND Person.Sex=T.Sex
AND Person.ID<T.ID--如果上面使用MIN函數,這裡就要改成>
)

執行完後重新查詢Person表結果如下:

馬六因為只有一條記錄,所以沒有參與去重,直接顯示。

今天的案例分享結束,小夥伴們可以自己動手嘗試一下,興許工作中也會遇到類似問題。如果你在公眾中遇到一些有趣的問題也可以發送給我。

最後給大家分享我寫的SQL兩件套:《SQL基礎知識第二版》《SQL高級知識第二版》的PDF電子版。裡面有各個語法的解釋、大量的實例講解和批註等等,非常通俗易懂,方便大家跟著一起來實操。有需要的可以下載學習,只需要在下面的公眾號「數據前線」(非本號),後臺回復關鍵字:SQL,就行

數據前線

相關焦點

  • MySQL刪除重複數據
    問:假如有一個student(table_id,name,age)的表,有重複name和age數據, 怎麼寫出delete重複數據的sql?
  • sql刪除重複語句
    1、給表增加一個自增長的列作為主鍵,這樣的話,完全重複的數據就有了不一樣的地方alter table 表名 add column id int PRIMARY KEY AUTO_INCREMENT;`2、刪除重複的列中ID較小的那一個,保留較大的iddelete t1 from test t1inner join test t2wheret1.id < t2.id ANDt1
  • sql:刪除重複數據並且保留id最小的一條
    當測試資料庫中,有重複數據會導致selectOne
  • SQL語句解決重複數據並進行單一入庫問題,你值得了解
    01問題描述:我們這裡是做了一個數據的接入問題,需要不停的向資料庫中寫入數據,那這些數據中有的是重複的,重複的數據寫入資料庫既沒有意義,也浪費內存空間,所以我們需要想一個辦法來解決數據重複插入的問題。,只添加不同的數據,成功的操作條數是添加的真實條數,若沒有ignore關鍵字會報錯sql為:INSERT IGNORE INTO tb_user (username,ped,edit_time) values("小明",1,2018……);說明:但使用此方法就必須表中有某個欄位是具有唯一性或約束性的
  • SQL如何刪除重複數據
    在使用資料庫時,如何刪除重複數據? 如圖所示:用戶表(user)數據1、輸入查詢語句(查詢name重複數據)select * from user where name in (select name from user group by name having count(name) > 1)
  • SQL中如何刪除重複數據,只保留其中一行
    ,刪除保留其中一條(是否重複判斷基準為多個欄位)解決方案碰到這樣的問題我們先分解步驟來看創建測試數據找到重複的數據刪除重複的數據並且保留一行創建測試數據我們創建一個人員信息表並在裡面插入一些重複的數據。
  • SQL查找刪除重複行
    本文採用這一定義,或許你對「重複」的定義比這複雜,你需要對sql做些修改。如何刪除重複行        一個相關的問題是如何刪除重複行。一個常見的任務是,重複行只保留一行,其他刪除,然後你可以創建適當的索引,防止以後再有重複的行寫入資料庫。同樣,首先是弄清楚重複行的定義。你要保留的是哪一行呢?第一行,或者某個欄位具有最大值的行?本文中,假設要保留的是第一行——id欄位具有最小值的行,意味著你要刪除其他的行。
  • 日常答疑|MySQL刪除重複數據踩過得坑
    問題群友提問:MySQL這樣刪除重複數據為啥不成功呢?
  • 解決常見的Windows Server重複數據刪除問題
    如果應用的重複數據刪除出現問題會導致什麼後果?我可以關閉Windows Server重複數據刪除技術麼? 隨著新的應用以及數據密集型文件類型,包括客戶資料庫、電子郵件檔案、PDF文檔以及圖像庫和流媒體文件,存儲需求也大幅增加。數據重複數據刪除技術已成為一項減輕企業存儲要求的強大技術。
  • SQL如何刪除所有欄位都相同的重複數據?
    SQL Server資料庫:有時候在處理數據時會遇到不加主鍵的表,導致數據表內出現了一模一樣的數據,剛開始第一時間想到的方式是,把兩條數據全部刪除,然後再插入一條,但是這種可能數據量比較少的話,還可以,沒有那麼麻煩,一旦出現大量的數據需要處理
  • 高效刪除Oracle中重複數據的方法
    【IT168 技術文章】       在對資料庫進行操作過程中我們可能會遇到這種情況,表中的數據可能重複出現,使我們對資料庫的操作過程中帶來很多的不便,那麼怎麼刪除這些重複沒有用的數據呢?
  • 如何在Excel中一鍵刪除重複數據
    以下面這張表格為例:我們可以看到,這張表共有4列22行數據,分別是序號、姓名、國籍、籍貫。在實際工作中,我們要處理的數據可能要多得多。可以看出,在這張表中,第2行和第21行的數據重複,第16行和第22行的數據重複。下面,我們來看看如何一鍵刪除重複的數據。
  • 如何快速刪除表格區域中的重複數據
    在Excel工作表中處理數據時,如果其中的重複項太多,則核對起來相當麻煩。此時我們可以利用刪除重複值功能刪除重複數據。如果要刪除工作表中的重複數據,具體操作方法如下。第1步:打開文件所在位置,在數據區域中選中任意單元格;切換到(數據)選項卡;在(數據工具)組中單擊(刪除重複項)按鈕,如下圖所示。第2步:彈出(刪除重複項)對話框,在(列)列表框中選擇需要進行重複值檢查的列;單擊(確定)按鈕,如下圖所示。
  • excel表格中刪除重複數據保留一條
    excel表格中刪除重複數據只保留一條,看似很麻煩,其實Excel表格自己就提供了最簡單的「去重」功能。只需選中所需去重內容,點擊一下就會將重複數據去掉。以下圖中數據為例:在「數據」中找到「刪除重複項」後,點擊。
  • MySQL如何刪除重複數據
    MySQL中經常會遇到重複的數據,那麼當我們遇到重複的時候的時候,如果定位哪些數據是有重複的記錄?如何刪除重複的數據?我們該怎麼做呢?接下來我們一步步來分析一下遇到這樣的情況後,該如何處理。也就是我們的上面的這個表中每一組重複數據中id最小的一行數據需要保留,其他比較大的id的重複的數據行需要被刪除。當然如果是要保留id行最大的一行數據最為最後的數據行也是可以了,只要在查詢的時候,稍微修改一下SQL語句的min(id)或max(id)函數即可。
  • 數據集合併(set,append,merge,SQL實現)
    在數據集合併前,首先應明確合併後數據集效果,是把多個數據集簡單的縱向拼接(串聯),還是根據一定索引變量橫向連接,是否需要刪除數據集中重複觀測對象
  • 重複數據刪除如何對主存儲進行優化
    主要文件系統存儲優化(也就是在同樣的空間塞進更多的數據)繼續在日益普及。這裡的挑戰是主存儲的重複數據刪除[注]並不是沒有規則的。你不能刪除這個重複的數據,也不能刪除那個重複的數據,你必須要認識到刪除重複數據之後對設備性能的影響。EMC已經宣布了在自己的Celerra平臺上刪除重複數據的功能。
  • excel刪除重複數據保留一條
    EXCEL中刪除重複內容只保留一個,可使用數據工具中的「刪除重複項」實現。第一種方法步驟如下:1、打開需要操作的EXCEL表格,選中需要刪除重複內容的數據列,點擊工具欄的「數據」項。2、找到數據工具,點擊「刪除重複項」。3、選擇「全選」,然後點擊下面的確定按鈕即可。4、返回EXCEL表格,可發現已成功刪除重複內容只保留一個。
  • Oracle資料庫刪除重複數據的情況!
    【IT168 論壇採風】在對資料庫進行操作過程中我們可能會遇到這種情況,表中的數據可能重複出現,使我們對資料庫的操作過程中帶來很多的不便,那麼怎麼刪除這些重複沒有用的數據呢?
  • 刪除數據重複項,Excel中的這3種方法簡單高效
    種種原因造成數據表中的數據存在重複現象, 刪除重複數據是數據清洗的首要任務。今天,就給大家分享3種方法,以幫助大家快速刪除Excel中的重複數據。刪除重複項是 Excel 提供的數據去重功能, 可以快速刪除重複項, 具體操作步驟如下。步驟 01 執行刪除重複值命令。