2010-08-02 169 views
0

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

+2

有样品的例子,但你应该学会这两个搜索现有的答案和接受回答您存在的问题。 – 2010-08-02 07:06:50

+0

您使用的是什么RDBMS?你最近的10个问题中有没有得到满意的回答?如果是的话,你能接受这些答案吗? – 2010-08-02 09:15:39

+0

如果你使用MySQL,你可能想从昨天看看这篇文章:http://stackoverflow.com/questions/3383898/remove-duplicates-using-only-a-mysql-query – 2010-08-02 09:39:49

回答

5

试试这个 -

身份加入ID列到表中第一个 -

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 
) 

请考虑到,那它只删除一个现有行的副本。如果存在共享分组条件的三行 - 除非多次执行查询(直到没有行被删除)或更改删除条件,否则这将不起作用。

0

使用distinct

SELECT distinct * FROM Table .... 
0

这主要取决于你的表结构,约束上的数量已经和列的,如果有任何主键的数量。

您需要找到optmized查询,它将基于上述约束条件来识别唯一记录,然后最重要的是您需要考虑根据查询删除这些重复项所用的时间。

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

希望这个小输入有帮助。

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