日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

如何去重一个SQL Server表

發(fā)布時(shí)間:2025/5/22 数据库 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何去重一个SQL Server表 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
前面我寫(xiě)了個(gè)博客記錄如何去重一個(gè)oracle表(link), 主要是利用了oracle的rowid偽列和row_number()分析函數(shù). 有讀者寫(xiě)郵件問(wèn), 如何去重一個(gè)SQL Server表, 場(chǎng)景和前面文章一樣, 即: 有部分字段有重復(fù)值, 表結(jié)構(gòu)中沒(méi)有一個(gè)能唯一定位的ID列, 也不允許修改表結(jié)構(gòu). 下面我給了個(gè)基本的思路.


--步驟0, 根據(jù)原表table_a, 創(chuàng)建一個(gè)臨時(shí)表table_a_temp, 僅僅增加了一個(gè)自增列row_id, 原因是SQL Server沒(méi)有類(lèi)似Oracle的rowid偽列, 我們就自己造一個(gè).?
--假設(shè)原表的結(jié)果為: create table table_a (pk int, other_field char(10));
create table table_a_temp (pk int, other_field char(10), row_id int IDENTITY(1,1) NOT NULL);

--步驟1, 將重復(fù)PK的記錄加載到臨時(shí)表table_a_temp
truncate table table_a_temp ;
insert into table_a_temp(pk, other_field) select pk, other_field from table_a a group by pk, other_field having count(*)>1 ;

--步驟2, 刪除所有重復(fù)PK的記錄, 這不是去重
--SQL Server 關(guān)聯(lián)delete的寫(xiě)法有點(diǎn)詭異 delete table_a from table_a
delete table_a? from table_a? b? inner join
(
select pk,other_field from table_a a group by pk, other_field having count(*)>1
) c
on b.pk=c.pk and b.other_field=c.other_field ;

--步驟3, 重表table_a_temp. 因?yàn)閠able_a_temp表有一個(gè)自增字段row_id, 這時(shí)候, 我們就可以利用row_id來(lái)去重
--代碼略, 可參考o(jì)racle版本的代碼(link)

--步驟4, 將去重后的table_a_temp記錄補(bǔ)會(huì)到原表table_a, 這樣table_a就沒(méi)有重復(fù)的pk
insert into table_a (pk, other_field) select pk, other_field from table_a_temp ;

轉(zhuǎn)載于:https://www.cnblogs.com/harrychinese/archive/2011/05/09/eliminate_duplicate_records_in_sql_table.html

《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的如何去重一个SQL Server表的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。