从表中删除重复记录

时间:2010-12-16 22:56:22

标签: sql sql-server database tsql

我有一个名为Table1的表,它有48条记录。其中只有24个应该在那个表中。出于某种原因,我插入了重复的记录。如何从该表中删除重复记录。

3 个答案:

答案 0 :(得分:5)

如果SQL Server版本是2005或更高版本,可以尝试以下内容。

WITH cte AS
    (
    SELECT {list-of-columns-in-table},
      row_number() over (PARTITION BY {list-of-key-columns} ORDER BY {rule-to-determine-row-to-keep}) as sequence
    FROM myTable
    )

DELETE FROM cte
WHERE sequence > 1

这使用公用表表达式(CTE)并添加序列列。 {list-of-columns-in-table}就像它所说的那样。并非所有列都是必需的,但我不会在此解释。

{list-of-key-columns]是用于定义重复内容的列。

{rule-to-determination-row-to-keep}是一个序列,因此第一行是要保留的行。例如,如果要保留最旧的行,则可以使用日期列作为序列。

以下是使用真实列的查询示例。

WITH cte AS
    (
    SELECT ID, CourseName, DateAdded,
        row_number() over (PARTITION BY CourseName ORDER BY DateAdded) as sequence
    FROM Courses
    )

DELETE FROM cte
WHERE sequence > 1

此示例根据CoursName值删除重复的行,并将最旧的行保留在DateAdded值上。

答案 1 :(得分:0)

http://support.microsoft.com/kb/139444

此部分是。您应该带走主要点。 ;)

  

本文讨论如何定位   并从中删除重复的主键   一张桌子。但是,你应该密切关注   检查允许的过程   重复发生以便   防止再次发生。

通过按逻辑键对数据进行分组来识别您的记录,因为您显然没有定义它们,并且应用了HAVING COUNT(*)>最后1条声明。文章深入探讨了这一点。

答案 2 :(得分:0)

这是一种更简单的方法

Select * Into #TempTable FROM  YourTable
Truncate Table YourTable
Insert into YourTable Select Distinct * from #TempTable
Drop Table #TempTable