如何去重一个SQL Server表
--步驟0, 根據(jù)原表table_a, 創(chuàng)建一個臨時表table_a_temp, 僅僅增加了一個自增列row_id, 原因是SQL Server沒有類似Oracle的rowid偽列, 我們就自己造一個.?
--假設(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的記錄加載到臨時表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的寫法有點(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. 因為table_a_temp表有一個自增字段row_id, 這時候, 我們就可以利用row_id來去重
--代碼略, 可參考o(jì)racle版本的代碼(link)
--步驟4, 將去重后的table_a_temp記錄補(bǔ)會到原表table_a, 這樣table_a就沒有重復(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ù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的如何去重一个SQL Server表的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MFC类结构-1、CObject类
- 下一篇: 到底什么是MiddleWare(中间件)