2010-01-06 133 views
1

考虑到我有一个名为A的表。其中我只有一列名为mark。 它有一些重复的值。如何删除没有临时表的重复值。 表中应该包含重复值之一。删除表中的重复记录

+0

删除计算器中重复quetions:http://www.google.com/search?q=duplicate+records+site:stackoverflow.com – 2010-01-06 12:59:27

+0

http://stackoverflow.com/questions/1585412/sql-到删除,复制,记录-IN-A-表 – 2010-01-06 13:00:31

+0

苏珊,如果你点击Vinko提供的链接,你可以从那些以往类似SO问题,找到问题的答案。 – DOK 2010-01-06 13:02:08

回答

0

如果表中有两条记录相同,我不确定如何唯一标识一条以删除该条目。 你可以做什么是:

  • 删除这两个,然后添加一回可能使用游标或循环结构。
  • 选择到另一个表和组中,这样您就不会获得重复项,然后从原始项中删除所有行并将其复制。
  • 一个id列添加到该表,填充它然后调用:

    DELETE从 WHERE( ID NOT IN (SELECT MAX(ID) 从 GROUP BY名) )

,你可以删除此列之后

+0

您好只是看到它只有一列在表 – susanthosh 2010-01-12 12:20:15

+0

我明白这一点。我的建议涉及表格中的记录(行)而不是列。 – bobwah 2010-01-12 13:24:53

1

SELECT * 从INNER JOIN一为B WHERE A.marks = B.marks;

这显示重复值(如果我没有犯错),所以也许你可以做一个删除一个加入?

编辑:我探微试试这个,这是行不通的,不要在你的表有一个ID列? 喜欢:

SELECT * 
FROM A INNER JOIN A as B ON A.marks = B.marks 
WHERE A.id != B.id; 
0

它之所以如此难以删除重复susantosh是因为你还没有定义在表中的任何键是什么让你的任何行的独特之处? 你需要拿起桌子上的设计基础书,意识到,如果没有某种形式的独特性,你会自己开车疯狂试图找出什么。

有几件事情可以做:

  1. SELECT DISTINCT marks FROM TableName INTO NewTableName
  2. GROUP BY特定标记它们移动到另一个表,然后删除分组表
  3. 添加唯一标识列(可能的int类型)然后编写代码以摆脱重复项

这些只是您的一些选项,但如果不理解表设计的基本知识,您将遇到t他的问题一遍又一遍。

+0

其中最主要的是我们不应该使用任何临时表。 – susanthosh 2010-01-12 12:31:26

0
WITH q AS 
     (
     SELECT *, ROW_NUMBER() OVER (PARTITION BY marks ORDER BY marks) AS rn 
     FROM a 
     ) 
DELETE 
FROM q 
WHERE rn > 1