回答

收藏

删除表中多个重复行

技术问答 技术问答 207 人阅读 | 0 人回复 | 2023-09-14

我在一个表中有多组重复项(一个表有三个记录,另一个表有两个记录等)-多行多于1行。+ A/ B& B- I) v: l0 {8 \. l9 m/ @
以下是我想删除它们的方法,但无论重复多少,我都必须操作脚本:
' P- p& h8 y7 J6 ~set rowcount 1delete from Tablewhere code in (  select code from Table   group by code  having (count(code) > 1))set rowcount 0这在一定程度上是有效的。我需要为每组重复项操作这个命令,然后它只删除1(这是我现在需要的全部)。& U6 f! ?2 Y# x. t
                                                               
% M- @$ d: ?& i9 C( u' q    解决方案:                                                                0 u7 W% ~  G4 @! p8 t+ M+ q% n  {
                                                                如果表上有键列,可以用它来识别表中唯一的不同行。
  A% v  S5 }+ U+ }: D只需使用子查询识别唯一行ID列表,然后删除此集以外的所有内容。.....7 O5 d: o* C6 O( H
create table #TempTable(    ID int identity(1,1) not null primary key,   SomeData varchar(100) not null)insert into #TempTable(SomeData) values('someData1')insert into #TempTable(SomeData) values('someData1')insert into #TempTable(SomeData) values('someData2')insert into #TempTable(SomeData) values('someData2')insert into #TempTable(SomeData) values('someData2')insert into #TempTable(SomeData) values('someData3')insert into #TempTable(SomeData) values('someData4')select * from #TempTable--Records to be deletedSELECT IDFROM #TempTableWHERE ID NOT IN(    select MAX(ID)    from #TempTable    group by SomeData)--Delete themDELETEFROM #TempTableWHERE ID NOT IN(    select MAX(ID)    from #TempTable    group by SomeData)--Final Result Setselect * from #TempTabledrop table #TempTable;或者,你可以用CTE作为示例:
$ c  _+ I; J* Z/ K8 {WITH UniqueRecords AS(    select MAX(ID) AS ID    from #TempTable    group by SomeData)DELETE AFROM #TempTable A    LEFT outer join UniqueRecords B on        A.ID = B.IDWHERE B.ID IS NULL
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则