1. 2個結果進行union 時,也可以去重2. group by 也可以去重
====below is a reprint of others====
假設現在資料庫中有乙個人員表(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,這一點十分重要、
資料庫去重
資料庫資料去重方法 假設現在資料庫中有乙個人員表 user 表中包括 主鍵id,姓名name 身份證號碼id number等字段。由於程式的的原因,後來發現表中有許多理論上重複的資料 例如姓名 和身份證號相同的資料 現在要求根據身份證號碼和姓名去除表中的重複資料。select max id from...
php 資料庫去重
對於兩種去重方式 利用distinct去重 簡單易用,但只能對於單一欄位去重,並且最終的結果也僅為去重的字段,實際應用價值不是特別大。利用group去重,最終的顯示結果為所有字段,且對單一字段進行了去重操作,效果不錯,但最終顯示結果除去去重字段外,按照第乙個字段進行排序,可能還需要處理。test d...
一千萬條資料去重 資料庫資料去重方法
資料庫資料去重方法 在大量資料庫資料處理的時候,發現很多重複項,這些重複項給工作帶來很多不便,那麼,怎麼才能更快的去重呢,有沒有好的資料庫資料去重方法呢,下面給大家推薦幾種資料庫資料去重方法,簡單的了解下吧。假設現在資料庫中有乙個人員表 user 表中包括 主鍵id,姓名 身份證號碼 等字段。由於程...