编写查询以删除重复记录而不删除所有重复行

时间:2014-10-14 11:05:37

标签: sql

假设表A的列B如下:

tbl A

------------------------
column B

10

10

20

20

50

50

40

那么如何删除重复记录?例如。在上面的列中有两个" 10" s,因此只有一个应该被删除。这是条件,如何实现呢?

2 个答案:

答案 0 :(得分:2)

如果您使用SQL-Server(或其他支持窗口功能的rdbms),您可以使用ROW_NUMBER

因此,这适用于SQL-Server 2005以及:

WITH CTE  -- a common-table-expression which is similar to a subquery, increases readability
(
    SELECT ColumnB, RN = ROW_NUMBER() OVER (PARTITION BY ColumnB ORDER BY ColumnB)
    FROM dbo.TblA
)
DELETE FROM CTE WHERE RN > 1

我喜欢这种方法,因为很容易使用SELECT来查看我要删除的内容。

答案 1 :(得分:1)

这适用于Oracle RDBMS

DELETE FROM table_A
      WHERE ROWID IN (
              SELECT rid
                FROM (SELECT ROWID rid,
                            ROW_NUMBER () OVER (PARTITION BY B ORDER BY ROWID) rn
                     FROM table_A)
             WHERE rn <> 1);