亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > DB2 > 正文

快速刪除重復記錄

2024-09-06 23:58:10
字體:
來源:轉載
供稿:網友


數據庫中刪除重復記錄一直是件挺煩人的事,本人收集了oracle跟sqlserver的快速刪除重復記錄的方法,供大家參考,希望對大家有所幫助。

sql server
  想必每一位sql server開發人員都有過類似的經歷,在對數據庫進行查詢或統計的時候不時地會碰到由于表中存在重復的記錄而導致查詢和統計結果不準確。解決該問題的辦法就是將這些重復的記錄刪除,只保留其中的一條。

  在sql server中除了對擁有十幾條記錄的表進行人工刪除外,實現刪除重復記錄一般都是寫一段代碼,用游標的方法一行一行檢查,刪除重復的記錄。因為這種方法需要對整個表進行遍歷,所以對于表中的記錄數不是很大的時候還是可行的,如果一張表的數據達到上百萬條,用游標的方法來刪除簡直是個噩夢,因為它會執行相當長的一段時間。

  四板斧——輕松消除重復記錄

  殊不知在sql server中有一種更為簡單的方法,它不需要用游標,只要寫一句簡單插入語句就能實現刪除重復記錄的功能。為了能清楚地表述,我們首先假設存在一個產品信息表products,其表結構如下:


create table products (
productid int,
productname nvarchar (40),
unit char(2),
unitprice money
)


  表中的數據如圖1:

圖表

  圖1中可以看出,產品chang和tofu的記錄在產品信息表中存在重復?,F在要刪除這些重復的記錄,只保留其中的一條。步驟如下:

  第一板斧——建立一張具有相同結構的臨時表


create table products_temp (
productid int,
productname nvarchar (40),
unit char(2),
unitprice money
)

  第二板斧——為該表加上索引,并使其忽略重復的值

  方法是在企業管理器中找到上面建立的臨時表products _temp,單擊鼠標右鍵,選擇所有任務,選擇管理索引,選擇新建。如圖2所示。

  按照圖2中圈出來的地方設置索引選項。

圖2

  第三板斧——拷貝產品信息到臨時表


  insert into products_temp select * from products

  此時sql server會返回如下提示:

  服務器: 消息 3604,級別 16,狀態 1,行 1

  已忽略重復的鍵。

  它表明在產品信息臨時表products_temp中不會有重復的行出現。

 第四板斧——將新的數據導入原表

  將原產品信息表products清空,并將臨時表products_temp中數據導入,最后刪除臨時表products_temp。
  delete products
  insert into products select * from products_temp
  drop table products_temp

  這樣就完成了對表中重復記錄的刪除。無論表有多大,它的執行速度都是相當快的,而且因為幾乎不用寫語句,所以它也是很安全的。

  小提示:上述方法中刪除重復記錄取決于創建唯一索引時選擇的字段,在實際的操作過程中讀者務必首先確認創建的唯一索引字段是否正確,以免將有用的數據刪除。


oracle
  在oracle中,可以通過唯一rowid實現刪除重復記錄;還可以建臨時表來實現...這個只提到其中的幾種簡單實用的方法,希望可以和大家分享(以表employee為例)。

  sql> desc employee

  name null? type

  emp_id number(10)
  emp_name varchar2(20)

  salary number(10,2)


  可以通過下面的語句查詢重復的記錄:
  sql> select * from employee;

  emp_id emp_name salary

  1 sunshine 10000

  1 sunshine 10000

  2 semon 20000

  2 semon 20000

  3 xyz 30000

  2 semon 20000

  sql> select distinct * from employee;

  emp_id emp_name salary

  1 sunshine 10000

  2 semon 20000

  3 xyz 30000

  sql> select * from employee group by emp_id,emp_name,salary having count (*)>1

  emp_id emp_name salary

  1 sunshine 10000

  2 semon 20000

  sql> select * from employee e1

  where rowid in (select max(rowid) from employe e2
  where e1.emp_id=e2.emp_id and

  e1.emp_name=e2.emp_name and e1.salary=e2.salary);


  emp_id emp_name salary

  1 sunshine 10000

  3 xyz 30000

  2 semon 20000


  2. 刪除的幾種方法:

 ?。?)通過建立臨時表來實現
  sql>create table temp_emp as (select distinct * from employee)

  sql> truncate table employee; (清空employee表的數據)

  sql> insert into employee select * from temp_emp; (再將臨時表里的內容插回來)


  ( 2)通過唯一rowid實現刪除重復記錄.在oracle中,每一條記錄都有一個rowid,rowid在整個數據庫中是唯一的,rowid確定了每條記錄是在oracle中的哪一個數據文件、塊、行上。在重復的記錄中,可能所有列的內容都相同,但rowid不會相同,所以只要確定出重復記錄中那些具有最大或最小rowid的就可以了,其余全部刪除。

  sql>delete from employee e2 where rowid not in (
  select max(e1.rowid) from employee e1 where

  e1.emp_id=e2.emp_id and e1.emp_name=e2.emp_name and e1.salary=e2.salary);--這里用min(rowid)也可以。

  sql>delete from employee e2 where rowid <(
  select max(e1.rowid) from employee e1 where
  e1.emp_id=e2.emp_id and e1.emp_name=e2.emp_name and e1.salary=e2.salary);

 ?。?)也是通過rowid,但效率更高。

  sql>delete from employee where rowid not in (
  select max(t1.rowid) from employee t1 group by t1.emp_id,t1.emp_name,t1.salary);--這里用min(rowid)也可以。


  emp_id emp_name salary

  1 sunshine 10000

  3 xyz 30000

  2 semon 20000

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产午夜精品理论片a级探花| 粗暴蹂躏中文一区二区三区| 亚洲精品国精品久久99热一| www国产亚洲精品久久网站| 久久久久久久国产精品视频| 国产精品私拍pans大尺度在线| 欧美性一区二区三区| 欧美精品国产精品日韩精品| 国产精品久久97| 欧美综合在线观看| 日韩在线一区二区三区免费视频| 狠狠久久亚洲欧美专区| 精品久久久久久久大神国产| 97国产一区二区精品久久呦| 1769国内精品视频在线播放| 国产91色在线播放| 亚洲影院污污.| 92福利视频午夜1000合集在线观看| 欧美激情a在线| 欧美一区二区三区免费视| 欧美自拍视频在线| 欧美日韩综合视频网址| 国产精品毛片a∨一区二区三区|国| 26uuu日韩精品一区二区| 色yeye香蕉凹凸一区二区av| 成人啪啪免费看| 欧美另类69精品久久久久9999| 久久视频精品在线| 国内精品久久久久| 日韩**中文字幕毛片| 国产精品激情av电影在线观看| 在线精品高清中文字幕| 91久久中文字幕| 91久久久久久| 欧美精品在线免费观看| 欧美高跟鞋交xxxxhd| 亚洲跨种族黑人xxx| 97香蕉久久夜色精品国产| 精品久久久久国产| 九色精品美女在线| 日韩欧美在线看| 欧美日本黄视频| 欧美成aaa人片在线观看蜜臀| 蜜臀久久99精品久久久无需会员| 亚洲香蕉av在线一区二区三区| 中文字幕日韩在线观看| 在线播放国产一区中文字幕剧情欧美| 日韩精品一二三四区| 97在线观看免费高清| 精品一区精品二区| 国产精品视频不卡| 中文字幕一区二区三区电影| 国产成人激情小视频| 高跟丝袜欧美一区| 国产亚洲精品久久久优势| 欧洲亚洲免费在线| 国产精品va在线| 欧美疯狂xxxx大交乱88av| 欧洲成人免费视频| 欧美日韩一区二区免费视频| 久久久久久久久久久久av| 欧美日韩一区免费| 久久视频在线直播| 国产一区二区黄| 啪一啪鲁一鲁2019在线视频| 国产一区二区在线免费视频| 亚洲最新中文字幕| 亚洲黄一区二区| 日韩综合视频在线观看| 91久久综合亚洲鲁鲁五月天| 欧美情侣性视频| 原创国产精品91| 欧美激情极品视频| 欧美激情xxxx| 国产精品无av码在线观看| 色偷偷9999www| 亚洲91精品在线观看| 国产精自产拍久久久久久| 日韩一区二区av| 精品中文字幕视频| 久久精品成人动漫| 久久久国产视频| 久久久视频在线| 亚洲国产精品成人精品| 久久精品人人做人人爽| 中文字幕国产亚洲2019| 欧美在线观看www| 日韩电影免费观看在线观看| 91精品久久久久| 精品爽片免费看久久| 欧美与黑人午夜性猛交久久久| 最近的2019中文字幕免费一页| 国产精品狼人色视频一区| 日韩美女在线观看| 亚洲日本中文字幕免费在线不卡| 国产精品尤物福利片在线观看| 日韩av电影在线播放| 国产日韩欧美日韩| 91精品国产九九九久久久亚洲| 成人a免费视频| 精品综合久久久久久97| 亚洲一区二区三区视频播放| 色偷偷噜噜噜亚洲男人的天堂| 亚洲天堂一区二区三区| 少妇高潮久久久久久潘金莲| 国产一区二区三区网站| 国产91在线播放九色快色| 一个色综合导航| 久久夜色精品亚洲噜噜国产mv| 欧美日韩一区二区在线| 久久久久久免费精品| 国内精品中文字幕| 伊人久久综合97精品| 日韩中文字幕在线视频播放| 国产精品色午夜在线观看| 日韩精品中文字幕有码专区| 国产精品久久网| 日韩中文娱乐网| 最近2019年中文视频免费在线观看| 国内成人精品一区| 亚洲天堂av在线播放| 日韩中文字幕在线播放| 亚洲精品国偷自产在线99热| 欧美日韩国产综合新一区| 国产精品白嫩初高中害羞小美女| 日韩美女激情视频| 久久久精品一区二区| 久久久精品视频在线观看| 精品美女国产在线| 日韩成人在线视频| 国产一区二区三区日韩欧美| 亚洲精品按摩视频| 久久99精品久久久久久琪琪| 亚洲精品国精品久久99热一| 午夜剧场成人观在线视频免费观看| 中文字幕欧美日韩精品| 国模视频一区二区三区| 久久久www成人免费精品| 成人在线激情视频| 成人a级免费视频| 国产91对白在线播放| 久久久久久高潮国产精品视| 热门国产精品亚洲第一区在线| 久久免费福利视频| 国产999精品久久久| 亚洲人成网站999久久久综合| 97成人精品视频在线观看| 中文字幕亚洲国产| 91中文字幕在线观看| 欧美成人免费在线观看| 欧美在线免费视频| 中文综合在线观看| 伊人av综合网| 日韩免费观看视频| 欧美成人第一页| 九九九久久国产免费| 欧美日韩国产丝袜美女| 国产久一一精品| 国产美女被下药99| 欧美日韩国产一区在线| 日韩av在线电影网| 欧美一级片免费在线| 91精品视频专区| 欧美大片第1页|