亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

利用SQL語句怎么刪除重復的記錄

發布時間:2021-03-26 17:49:54 來源:億速云 閱讀:779 作者:Leah 欄目:數據庫

利用SQL語句怎么刪除重復的記錄?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

如果要刪除手機(mobilePhone),電話(officePhone),郵件(email)同時都相同的數據,以前一直使用這條語句進行去重:

delete from 表 where id not in  
(select max(id) from 表 group by mobilePhone,officePhone,email )  
or 
delete from 表 where id not in  
 (select min(id) from 表 group by mobilePhone,officePhone,email ) 

delete from 表 where id not in 
(select max(id) from 表 group by mobilePhone,officePhone,email ) 
or 
delete from 表 where id not in 
 (select min(id) from 表 group by mobilePhone,officePhone,email )

其中下面這條會稍快些。上面這條數據對于100萬以內的數據效率還可以,重復數1/5的情況下幾分鐘到幾十分鐘不等,但是如果數據量達到300萬以上,效率驟降,如果重復數據再多點的話,常常會幾十小時跑不完,有時候會鎖表跑一夜都跑不完。無奈只得重新尋找新的可行方法,今天終于有所收獲:

//查詢出唯一數據的ID,并把他們導入臨時表tmp中  
select min(id) as mid into tmp from 表 group by mobilePhone,officePhone,email  
 //查詢出去重后的數據并插入finally表中  
insert into finally select (除ID以外的字段) from customers_1 where id in (select mid from tmp) 

//查詢出唯一數據的ID,并把他們導入臨時表tmp中 
select min(id) as mid into tmp from 表 group by mobilePhone,officePhone,email 
 //查詢出去重后的數據并插入finally表中 
insert into finally select (除ID以外的字段) from customers_1 where id in (select mid from tmp)

效率對比:用delete方法對500萬數據去重(1/2重復)約4小時。4小時,很長的時間。

用臨時表插入對500萬數據去重(1/2重復)不到10分鐘。

其實用刪除方式是比較慢的,可能是邊找邊刪除的原因吧,而使用臨時表,可以將沒有重復的數據ID選出來放在臨時表里,再將表的信息按臨時表的選擇出來的ID,將它們找出來插入到新的表,然后將原表刪除,這樣就可以快速去重啦。

SQL語句去掉重復記錄,獲取重復記錄

按照某幾個字段名稱查找表中存在這幾個字段的重復數據并按照插入的時間先后進行刪除,條件取決于order by 和row_num。

方法一按照多條件重復處理:

delete tmp from(  
select row_num = row_number() over(partition by 字段,字段 order by 時間 desc)  
 from 表 where 時間> getdate()-1  
 ) tmp  
 where row_num > 1 
delete tmp from( 
select row_num = row_number() over(partition by 字段,字段 order by 時間 desc) 
 from 表 where 時間> getdate()-1 
 ) tmp 
 where row_num > 1

方法二按照單一條件進行去重:

delete from 表 where 主鍵ID not in(  
select max(主鍵ID) from 表 group by 需要去重的字段 having count(需要去重的字段)>=1  
 ) 
delete from 表 where 主鍵ID not in( 
select max(主鍵ID) from 表 group by 需要去重的字段 having count(需要去重的字段)>=1 
 )

注意:為提高效率如上兩個方法都可以使用臨時表, not in 中的表可以先提取臨時表#tmp,

然后采用not exists來執行,為避免數量過大,可批量用Top控制刪除量

delete top(2) from 表  
   where not exists (select 主鍵ID  
 from #tmp where #tmp.主鍵ID=表.主鍵ID)

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

sql
AI

毕节市| 揭阳市| 青浦区| 大同市| 本溪市| 海城市| 安顺市| 昭通市| 长岭县| 山丹县| 奈曼旗| 姚安县| 青浦区| 盈江县| 睢宁县| 丽江市| 油尖旺区| 彰武县| 三都| 重庆市| 阳春市| 青田县| 江西省| 瑞安市| 侯马市| 准格尔旗| 灵武市| 绿春县| 会昌县| 衡阳县| 通榆县| 崇文区| 南召县| 和田县| 临江市| 射洪县| 深泽县| 新泰市| 湘潭市| 沐川县| 嘉黎县|