如何删除SQL Server中的重复数据?

时间:2009-03-10 12:45:28

标签: sql sql-server

我有sql表但是,有些值多次添加,我需要删除其中一个。你能给我一个简单的问题吗?

5 个答案:

答案 0 :(得分:7)

来自here。如果您还没有唯一标识每一行的“ID”字段,则需要创建一个用于此操作的字段(完成后您可以随时删除该列):

DELETE
FROM MyTable
WHERE ID NOT IN
(
SELECT MAX(ID)
FROM MyTable
GROUP BY DuplicateColumn1, DuplicateColumn2, DuplicateColumn2)

另外,在这个网站上搜索“删除重复的行sql server”,你会发现这个问题已在这里多次回答。

答案 1 :(得分:2)

DECLARE @Duplicates TABLE (AValue VARCHAR(32))

INSERT INTO @Duplicates VALUES ('No Duplicate')
INSERT INTO @Duplicates VALUES ('Duplicate')
INSERT INTO @Duplicates VALUES ('Duplicate')


SELECT ID = IDENTITY(INT, 1, 1), * 
INTO #Duplicates
FROM @Duplicates

DELETE FROM #Duplicates
FROM #Duplicates d
     INNER JOIN (
       SELECT ID = MIN(ID)
       FROM #Duplicates
       GROUP BY AValue
       HAVING COUNT(*) > 1
      ) id ON id.ID = d.ID

DELETE FROM @Duplicates

INSERT INTO @Duplicates
SELECT AValue FROM #Duplicates

DROP TABLE #Duplicates

SELECT * FROM @Duplicates

答案 2 :(得分:1)

;WITH tempTable AS   
    (  
            SELECT ROW_NUMBER() OVER (PARTITION BY Column1 ORDER BY Column2 ) AS rownumber,*   
            FROM @Table  
    )  
    DELETE FROM tempTable WHERE rownumber > 1 

这是从其中一个答案中提到的文章链接中获取的,但仅仅是为了在将来的某个时间保存某人..

答案 3 :(得分:0)

使用:
设置RowCount 1

然后运行你的删除sql

这将删除1行,无论是否有多行匹配。

然后关闭查询窗口,或使用 设置RowCount 0以重置它。

答案 4 :(得分:0)

  • 使用相同架构创建临时表
  • INSERT INTO temptable SELECT DISTINCT * FROM oldtable
  • 从旧表中删除
  • INSERT INTO oldtable SELECT * FROM temptable
  • DROP temptable

不要忘记:

  • 重构表格,不允许再次发生