Dan*_*Dan 5 sql t-sql sql-server
我确定以前曾经问过,但我很难找到它.
我在一个表中有多组重复项(3个记录为一个,2个为另一个,等等) - 存在多个行的多行.
下面是我想要删除它们,但我必须运行脚本,但有许多重复:
set rowcount 1
delete from Table
where code in (
select code from Table
group by code
having (count(code) > 1)
)
set rowcount 0
Run Code Online (Sandbox Code Playgroud)
这在某种程度上很有效.我需要为每组重复项运行它,然后它只删除1(这是我现在所需要的).
感谢您的帮助/评论!
如果表上有一个键列,则可以使用它来唯一标识表中的"不同"行.
只需使用子查询来标识唯一行的ID列表,然后删除此集合之外的所有内容.有些东西......
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 deleted
SELECT ID
FROM #TempTable
WHERE ID NOT IN
(
select MAX(ID)
from #TempTable
group by SomeData
)
--Delete them
DELETE
FROM #TempTable
WHERE ID NOT IN
(
select MAX(ID)
from #TempTable
group by SomeData
)
--Final Result Set
select * from #TempTable
drop table #TempTable;
Run Code Online (Sandbox Code Playgroud)
或者,你可以使用CTE例如:
WITH UniqueRecords AS
(
select MAX(ID) AS ID
from #TempTable
group by SomeData
)
DELETE A
FROM #TempTable A
LEFT outer join UniqueRecords B on
A.ID = B.ID
WHERE B.ID IS NULL
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
9100 次 |
最近记录: |