我在一个表中有多组重复项(一个表有三个记录,另一个表有两个记录等)-多行多于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