程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> 刪除重復的記錄,刪除重復記錄

刪除重復的記錄,刪除重復記錄

編輯:Oracle教程

刪除重復的記錄,刪除重復記錄


因是手動錄入數據,所以經常會產生重復的數據,這時就需要刪除多余的數據。

創建測試用表:

CREATE TABLE dupes(
    id integer,
    name varchar(10)
);
INSERT INTO dupes VALUES(1, 'TOM');
INSERT INTO dupes VALUES(2, 'ALLEN');
INSERT INTO dupes VALUES(3, 'ALLEN');
INSERT INTO dupes VALUES(4, 'SMITH');
INSERT INTO dupes VALUES(5, 'SMITH');
INSERT INTO dupes VALUES(6, 'SMITH');

SELECT * FROM dupes;

可以看到“ALLEN”和“SMITH”這兩個人的數據重復了,現在要求表中name重復的數據只保留一行,其他的刪除。

刪除數據有好幾種方法,下面介紹三種方法。

 

方法一:通過name相同,id不同的方式來判斷。

sql代碼如下:

DELETE FROM dupes a
 WHERE EXISTS (SELECT 1
          FROM dupes b
         WHERE a.name = b.name
           AND a.id > b.id);

SELECT * FROM dupes;

執行結果如下:

 

方法二:用ROWID來代替其中的id。

sql代碼如下:

DELETE FROM dupes a
 WHERE EXISTS (SELECT 1
          FROM dupes b
         WHERE a.name = b.name
           AND a.ROWID > b.ROWID);

執行結果如下:

 

方法三:通過分析函數根據name分組生成序號,然後刪除序號大於1的數據。

sql代碼如下:

DELETE FROM dupes a
 WHERE ROWID IN (SELECT rid
                   FROM (SELECT ROWID as rid,
                                ROW_NUMBER() OVER(PARTITION BY name ORDER BY id) AS seq
                           FROM dupes)
                  WHERE seq > 1);

執行結果和上面一樣。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved