Sql server 从表中删除重复项

Sql server 从表中删除重复项,sql-server,sql-server-2008,Sql Server,Sql Server 2008,如何从表中删除重复项?我知道有很多这样的问题,但总的来说,有一个独特的专栏,在我的情况下,我没有一个独特的专栏。 基本上,我的桌子看起来像: Name | LastName | someMoreData aaa | bbb | ccc ddd | eee | fff aaa | bbb | ccc 我想删除两行中的一行。没有关于标识和顺序的详细信息,仅根据您的示例,我可以提出以下解决方案: SELECT DISTINCT * INTO #t

如何从表中删除重复项?我知道有很多这样的问题,但总的来说,有一个独特的专栏,在我的情况下,我没有一个独特的专栏。 基本上,我的桌子看起来像:

Name | LastName | someMoreData
aaa  |   bbb    |    ccc
ddd  |   eee    |    fff
aaa  |   bbb    |    ccc

我想删除两行中的一行。

没有关于标识和顺序的详细信息,仅根据您的示例,我可以提出以下解决方案:

SELECT DISTINCT * INTO #tmp FROM your_table;
GO
TRUNCATE TABLE your_table;
GO
INSERT your_table
SELECT * FROM #tmp
GO
DROP TABLE #tmp
从基本表到临时表tmp中选择唯一的行 从基本表中删除所有数据 将数据从临时表移动到基本表 删除临时表
尝试下面的解决方案并检查此项

阶段1:创建具有不同数据的临时表。您可以使用以下任何查询

假设:t1是您的表名

select * into ##t2 from (select Distinct * from ##t1) as T

or

SELECT DISTINCT * INTO ##t2 FROM ##t1
阶段2:清理现有表格。因此,您可以删除/截断表并重新创建它,或者另一种方法就是删除表中的数据,因为您不再需要这些数据了

drop table ##t1

or 

Truncate table ##t1

or

delete from ##t1
阶段3:将数据插入到原始表中。记住,如果选择删除/截断,则必须使用Query1,否则必须使用Query2

问题1

问题2


注意:当执行drop/truncate时,表结构也会丢失,通过上面的Query1,我们也在创建结构

你可以这样做

with x as   (select  Name , LastName , someMoreData,rn = row_number()
        over(PARTITION BY Name , LastName , someMoreData order by Name
  )
        FROM yourtable)
   delete x where rn > 1

是否有任何东西使每一行都独一无二,或者你是说你只能通过查看所有列中的值来确定它是否是重复的?标记为重复的可能重复:StackOverflow上有多种解决方案。@NorbertvanNobelen我同意这已经被问了一百万次了,但你链接的是mysql,它被标记为sql server。可能的《谢谢》的复制品,效果很好从未考虑过添加行号以获得unike标识符
insert ##t1 select * from ##t2
with x as   (select  Name , LastName , someMoreData,rn = row_number()
        over(PARTITION BY Name , LastName , someMoreData order by Name
  )
        FROM yourtable)
   delete x where rn > 1