刪除Table表中的重複行的方法

2022-09-25 03:39:09 字數 2088 閱讀 5898

利用sql server 2005的新功能now_number和cte可以很好的實現.

舉例說明如下:

建立測試資料:

複製** **如下:

create table dup1

( col1 int null,

col2 varchar(20) null

) insert into dup1 values

(1, 'aaa'),

(2, 'aaa'),

(2, 'aaa'),

(2, 'aaa'),

(3, 'bbb'),

(3, 'bbb'),

(4, 'ccc'),

(4, 'ddd'),

(5, 'eee')

select * from dup1

可以檢視到重複的資料有:

複製** **如下:

select col1, col2, count(*) as dupwww.cppcns.comcountfrom dup1group by col1, col2h**ing count(*) > 1

接下來介紹如何delete掉重複的資料:

1.now_number:sql server 2005新增了很好用的ranking函式(now_number,rank,dense_rank,ntile),利用now_number()over(partition gy)最為直接,也最為方便,不能修改表或者產生多餘的列.

首先會分配乙個列號碼,以col1,col2組合來分割槽排序.

複製** **如下:

select col1, col程式設計客棧2,row_number() over (partition by col1, col2 order by col1) as rnfrom dup1

得到的序號如下:

很明顯的是重複列都分組分割排序,只需要delete1的即可.

複製** **如下:

--用到cte

with dupsd

as (

select col1, col2,

row_number() over (partition by col1, col2 order by col1) as rn

from dup1

) delete dupsd

where rn &程式設計客棧gt; 1;

--或者

delete a from (

select col1, col2,

row_number() over (partition by col1, col2 order by col1) as rn

from dup1) a where a.rn>1

2.建立乙個標識鍵唯一的表記一列.

複製** **如下:

alter table dbo.dup1

add

pk int identity

not null

constraint pk_dup1 primary key;

select *

from dup1;

刪除找出與col1,col2相同並且比dup1.pk大的記錄,也就是保留重複值中pk最小的記程式設計客棧錄.

複製** **如下www.cppcns.com:

delete dup1

where exists ( select *

from dup1 as d1

where d1.col1 = dup1.col1

and d1.col2 = dup1.col2

and d1.pk > dup1.pk );

3.select distant into,這種方法借助乙個新的table,把不重複的結果集轉移到新table中.

複製** **如下:

select distinct col1, col2 into nodupsfrom dup1;select * from nodups

建議採用第一種和第三種方法,第一種多見於t-sql的程式設計中,第三種在etl中常常使用.

本文標題: 刪除table表中的重複行的方法

本文位址:

如何刪除表中重複的行?

如何刪除表中重複的行?思路 記錄雖然存在重複,但是rowid是唯一的,所以在子查詢取得重複行中最小的rowid,刪除重複行中 大於最小的rowid的行,只是保留了最小rowid的行,就是刪除了重複行。create table bb 建立測試表 bbid int identity 1,1 自增列 bb...

如何刪除表的重複行

如何刪除sql server表中的重複行 若在你的ms sql server資料庫表中,有重複的多行,你可能想去刪除這些重複的記錄。t sql row number 函式能幫助sql開發者去解決這個sql的問題。1.建立tuser表 create table tuser name varchar 5...

刪除檔案中重複的行

今天在經過多次執行指令碼後時候突然發現 etc hosts下面有好多重複的行,突然想起來之前記得學過有命令的,但是忘了,後來在群裡面吼了幾句,有好多牛人相應,閒來與大家分享,o o root zy zy cat etc hosts do not remove the following line,o...