91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

利用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

东阿县| 体育| 上虞市| 策勒县| 扬中市| 廊坊市| 临邑县| 香格里拉县| 汾西县| 新营市| 宁波市| 慈利县| 岗巴县| 呼伦贝尔市| 屏东县| 冕宁县| 平昌县| 桃江县| 开平市| 石嘴山市| 库车县| 砚山县| 梁河县| 渭源县| 望城县| 汝南县| 博乐市| 怀远县| 汝城县| 错那县| 南溪县| 南木林县| 秦安县| 伊通| 特克斯县| 维西| 广西| 三原县| 工布江达县| 涿州市| 金平|