删除表中的重复记录

时间:2010-01-06 12:57:02

标签: sql-server

考虑到我有一个名为A的表。在其中我只有一个名为marks的列。 它有一些重复的值。如何在没有临时表的情况下删除重复值。 该表应包含一个重复的值。

4 个答案:

答案 0 :(得分:1)

SELECT *     从内部加入A作为B.     WHERE A.marks = B.marks;

这显示了重复的值(如果我没有犯错),那么也许你可以为DELETE做一个JOIN?

编辑:我试试这个,它不起作用,你的表中没有ID列吗? 像:

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

答案 1 :(得分:0)

如果表中的两条记录相同,我不确定如何唯一地标识一条记录以删除该项目。 你能做的是:

  • 删除两个,然后使用游标或循环结构添加一个。
  • 选择另一个表并分组,这样就不会出现重复项,然后从原文中删除所有行并将其复制到其中。
  • 在此表中添加一个id列,填充它然后调用:

    从A中删除 在哪里(              不在              (SELECT MAX(id)               从A               GROUP BY名称)           )

然后您可以删除此列

答案 2 :(得分:0)

删除重复项susantosh是如此困难的原因是因为您没有在表中定义任何键,所以什么使您的任何行唯一? 你需要拿一本关于桌子设计的基本书,并意识到如果没有某种独特性,你就会疯狂地试图找出任何东西。

您可以做一些事情:

  1. SELECT DISTINCT marks FROM TableName INTO NewTableName
  2. GROUP BY特定标记将它们移动到另一个表,然后删除prev表
  3. 添加一个UNIQUE Identity列(可能是int类型)然后编写代码以删除重复项
  4. 这些只是您的一些选择,但如果不了解表格设计的基础知识,您将一遍又一遍地遇到此问题。

答案 3 :(得分:0)

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