自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

SQL中刪除重復(fù)數(shù)據(jù)問題

運(yùn)維 數(shù)據(jù)庫運(yùn)維
我們數(shù)據(jù)庫中最后要保留的結(jié)果就是第二步中查詢出來的數(shù)據(jù),我們把其他的數(shù)據(jù)刪除即可。怎么刪除呢?我們使用ID來排除。

[[437524]]

本文轉(zhuǎn)載自微信公眾號(hào)「SQL數(shù)據(jù)庫開發(fā)」,作者丶平凡世界  。轉(zhuǎn)載本文請(qǐng)聯(lián)系SQL數(shù)據(jù)庫開發(fā)公眾號(hào)。

需求分析

數(shù)據(jù)庫中存在重復(fù)記錄,刪除保留其中一條(是否重復(fù)判斷基準(zhǔn)為多個(gè)字段)

解決方案

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

  • 創(chuàng)建測(cè)試數(shù)據(jù)
  • 找到重復(fù)的數(shù)據(jù)
  • 刪除重復(fù)的數(shù)據(jù)并且保留一行

創(chuàng)建測(cè)試數(shù)據(jù)

我們創(chuàng)建一個(gè)人員信息表并在里面插入一些重復(fù)的數(shù)據(jù)。

  1. CREATE TABLE [dbo].[Person]( 
  2.  [ID] [INT] IDENTITY(1,1) NOT NULL
  3.  [Name] [VARCHAR](20) NULL
  4.  [Age] [INTNULL
  5.  [Address] [VARCHAR](20) NULL
  6.  [Sex] [CHAR](2) NULL 
  7. ); 
  8.  
  9. SET IDENTITY_INSERT [dbo].[Person] ON
  10. INSERT INTO [dbo].[Person] (ID,Name,Age,Address,Sex) 
  11. VALUES 
  12. ( 1, '張三', 18, '北京路18號(hào)''男' ), 
  13. ( 2, '李四', 19, '北京路29號(hào)''男' ), 
  14. ( 3, '王五', 19, '南京路11號(hào)''女' ), 
  15. ( 4, '張三', 18, '北京路18號(hào)''男' ), 
  16. ( 5, '李四', 19, '北京路29號(hào)''男' ), 
  17. ( 6, '張三', 18, '北京路18號(hào)''男' ), 
  18. ( 7, '王五', 19, '南京路11號(hào)''女' ), 
  19. ( 8, '馬六', 18, '南京路19號(hào)''女' ); 
  20. SET IDENTITY_INSERT [dbo].[Person]  OFF

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

建立好測(cè)試數(shù)據(jù)如下:

我們發(fā)現(xiàn)除了自增長(zhǎng)ID不同以為,有幾條其他字段都重復(fù)的數(shù)據(jù)出現(xiàn),符合我們的需求。

找出重復(fù)的數(shù)據(jù)

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

HAVING將分組后統(tǒng)計(jì)出來的數(shù)量大于1的數(shù)據(jù)行,就是我們要找的重復(fù)數(shù)據(jù):

上面用Max函數(shù)或者M(jìn)in函數(shù)均可,只是為了保證取出來的數(shù)據(jù)的唯一性。

刪除重復(fù)的數(shù)據(jù)

其實(shí)我們數(shù)據(jù)庫中最后要保留的結(jié)果就是第二步中查詢出來的數(shù)據(jù),我們把其他的數(shù)據(jù)刪除即可。怎么刪除呢?我們使用ID來排除。

  1. DELETE  FROM Person 
  2. WHERE  EXISTS 
  3. SELECT * FROM ( 
  4. SELECT  
  5. MAX(ID) ID, 
  6. Name,Age,Address,Sex 
  7. FROM dbo.Person 
  8. GROUP BY Name,Age,Address,Sex 
  9. HAVING COUNT(1)>1) T 
  10. WHERE Person.Name=T.Name 
  11. AND Person.Age=T.Age 
  12. AND Person.Address=T.Address 
  13. AND Person.Sex=T.Sex 
  14. AND Person.ID<T.ID--如果上面使用MIN函數(shù),這里就要改成> 

執(zhí)行完后重新查詢Person表結(jié)果如下:

馬六因?yàn)橹挥幸粭l記錄,所以沒有參與去重,直接顯示。

今天的案例分享結(jié)束,小伙伴們可以自己動(dòng)手嘗試一下,興許工作中也會(huì)遇到類似問題。如果你在公眾中遇到一些有趣的問題也可以發(fā)送給我。

 

責(zé)任編輯:武曉燕 來源: SQL數(shù)據(jù)庫開發(fā)
相關(guān)推薦

2010-07-07 16:53:54

SQL Server重

2010-09-02 10:36:51

SQL刪除

2011-04-13 13:05:14

重復(fù)數(shù)據(jù)刪除

2010-07-08 13:06:05

SQL Server刪

2010-07-21 11:38:59

SQL Server重

2010-07-26 14:58:26

SQL Server刪

2010-07-26 09:55:55

SQL Server重

2010-07-23 15:09:42

SQL Server刪

2010-07-23 16:21:37

SQL Server重

2010-07-01 12:29:27

SQL Server重

2023-02-26 23:31:01

SQL數(shù)據(jù)庫

2009-01-11 17:32:03

Oracle數(shù)據(jù)庫重復(fù)數(shù)據(jù)

2011-03-14 15:47:33

Oracle數(shù)據(jù)庫

2011-04-13 13:13:09

重復(fù)數(shù)據(jù)刪除

2010-07-08 13:20:05

SQL Server刪

2024-10-16 17:04:13

2009-02-27 10:18:41

重復(fù)數(shù)據(jù)刪除In-linePost-Proces

2015-10-23 16:40:21

DB2刪除數(shù)據(jù)

2011-03-10 15:06:02

重復(fù)數(shù)據(jù)刪除技術(shù)

2010-11-03 13:50:49

DB2刪除重復(fù)數(shù)據(jù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)