我是否可以通过某种方式删除表中存在的重复记录。我只想通过查询删除一条记录和其余记录。这可以通过查询完成。 请建议
答案 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