删除重复记录

时间:2010-08-02 07:03:26

标签: sql

我是否可以通过某种方式删除表中存在的重复记录。我只想通过查询删除一条记录和其余记录。这可以通过查询完成。 请建议

4 个答案:

答案 0 :(得分:5)

试试这个 -

首先将ID列作为IDENTITY添加到您的表中 -

alter <tablename> add id INT IDENTITY

然后使用以下查询删除重复记录 -

delete 
FROM <tablename>
WHERE id IN
(
SELECT MAX(id)
FROM <tablename>
GROUP BY <columnnames defining uniqueness>
having count ( * )   > 1
)

请注意,它只会删除现有行的一个副本。如果有三行共享分组条件 - 这将无效,除非您多次执行查询(直到没有删除任何行)或更改删除条件。

答案 1 :(得分:0)

使用distinct

SELECT distinct * FROM Table ....

答案 2 :(得分:0)

它基本上取决于您的表的结构,它具有的约束数量以及主键中的列数(如果有的话)。

您需要找到optmized查询,该查询将根据您具有的上述限制来识别唯一记录,然后您最需要考虑在查询时删除这些重复项所花费的时间。

除非您发布完整的结构和一些示例重复数据,否则没有人可以评论。

希望这个小小的输入有所帮助。

答案 3 :(得分:0)

以下是删除重复记录的示例示例

Create table #Test (colA int not null, colB int not null, colC int not null, id int not null identity) on [Primary]
GO
INSERT INTO #Test (colA,colB,colC) VALUES (1,1,1)
INSERT INTO #Test (colA,colB,colC) VALUES (1,1,1)
INSERT INTO #Test (colA,colB,colC) VALUES (1,1,1)

INSERT INTO #Test (colA,colB,colC) VALUES (1,2,3)
INSERT INTO #Test (colA,colB,colC) VALUES (1,2,3)
INSERT INTO #Test (colA,colB,colC) VALUES (1,2,3)

INSERT INTO #Test (colA,colB,colC) VALUES (4,5,6)
GO
Select * from #Test
GO
Delete from #Test where id <
(Select Max(id) from #Test t where #Test.colA = t.colA and
#Test.colB = t.colB and
#Test.colC = t.colC)
GO
Select * from #Test
GO