一千萬條資料去重 資料庫資料去重方法

2021-10-16 21:06:19 字數 1239 閱讀 9140

資料庫資料去重方法

在大量資料庫資料處理的時候,發現很多重複項,這些重複項給工作帶來很多不便,那麼,怎麼才能更快的去重呢,有沒有好的資料庫資料去重方法呢,下面給大家推薦幾種資料庫資料去重方法,簡單的了解下吧。

假設現在資料庫中有乙個人員表(user),表中包括 主鍵id,,姓名、身份證號碼、等字段。由於程式的的原因、好來發現表中有許多理論上重複的資料(即姓名、和身份證號相同的資料),現在要求根據身份證號碼和姓名去除表中的重複資料。

select max(id) as id,姓名,身份證號 from user group by 姓名,身份證號;

通過上面的這條sql語句即可得到乙份沒有重複姓名和身份證號的一組資料,當然只等得到id、姓名、和身份證號,其實我們真正想要的只有id一列而已。因為我們只要得到沒有重複資料的id就可以找出所有的並且不重複的資料了。

接下類我們使用巢狀的查詢 得到所有的不重複資料的id

select id  from (select max(id) as id,姓名,身份證號 from user group by 姓名,身份證號) as t

得到我們需要的id之後我們可以有好幾種選擇:1、使用  not in 刪除所有id不在以上查出的id範圍的資料。即刪除重複的資料

delete form user where  id not in (select id from (select max(id) as id,姓名,身份證號 from user group by 姓名,身份證號) as t );

使用not in 非常耗費資料庫資源,並且 如果資料量大的話,會非常的慢,可能會慢的難以忍受,因此不建議使用。

除了可以使用 not in 之外還可以使用臨時表的方法:

1、找出所有不重複的資料

select * into #temp1  from user where id in (select id from (select max(id) as id,姓名,身份證號 from user group by 姓名,身份證號) as t );

2,刪除原表中的所有資料

delete from user;

3、將臨時表中的資料在插入會user表

insert into user  select * from #temp1;

4,刪除臨時表

drop #temp1;

現在總結一下我的思路

這裡的關鍵是根據需要判斷是否重複的字段分組後、使用聚合函式max 或者min得到唯一的id,這一點十分重要、

喜歡 (1)or分享 (0)

oracle資料庫查詢去重資料

oracle資料庫查詢重複的資料 1.在日常的使用中,專案中常常會遇到有某乙個字段存在多條重複的資料,但是在查詢的時候我們只需要查詢出一條即可,在查詢oralce的時候可以用 row number over partition by 去重欄位1,去重欄位2 order by 去重欄位1,去重欄位2 ...

資料庫去重

資料庫資料去重方法 假設現在資料庫中有乙個人員表 user 表中包括 主鍵id,姓名name 身份證號碼id number等字段。由於程式的的原因,後來發現表中有許多理論上重複的資料 例如姓名 和身份證號相同的資料 現在要求根據身份證號碼和姓名去除表中的重複資料。select max id from...

資料庫資料去重方法

1.2個結果進行union 時,也可以去重 2.group by 也可以去重 below is a reprint of others 假設現在資料庫中有乙個人員表 user 表中包括 主鍵id,姓名 身份證號碼 等字段。由於程式的的原因 好來發現表中有許多理論上重複的資料 即姓名 和身份證號相同的...