資料庫去重

2021-07-11 16:07:09 字數 1287 閱讀 7727

資料庫資料去重方法

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

select max(id) from user group by name,id_number;

通過上面的這條sql語句即可得到一組沒有重複姓名和身份證號的id,得到我們需要的id之後我們可以有幾種選擇:1、使用  not in 刪除所有id不在以上查出的id範圍的資料。即刪除重複的資料

delete form user where  id not in (select max(id) from user group by name,id_number);

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

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

1、建立臨時表,表中內容為找出的所有不重複的資料

create temporary table tmp_table select * from user where id in(select max(id) from user group by name,id_number);

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

delete from user;

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

insert into user  select * from tmp_table;

4,刪除臨時表

drop table tmp_table;

現在總結一下思路

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

附全部用到的sql語句:

create temporary table tmp_table select * from user where id in (select max(id) from user group by name,id_number);

delete from user;

insert into user select * from tmp_table;

drop table tmp_table;

php 資料庫去重

對於兩種去重方式 利用distinct去重 簡單易用,但只能對於單一欄位去重,並且最終的結果也僅為去重的字段,實際應用價值不是特別大。利用group去重,最終的顯示結果為所有字段,且對單一字段進行了去重操作,效果不錯,但最終顯示結果除去去重字段外,按照第乙個字段進行排序,可能還需要處理。test d...

資料庫資料去重方法

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

sql資料庫去重語法 SQL如何去重?

展開全部 1 首先建立乙個臨時表,用於演示sqlserver語法中的去重關鍵字distinct的使用。本文以sqlserver資料庫為例演示,62616964757a686964616fe4b893e5b19e31333431373232 if object id tempdb.tmp1 is no...