假设表A的列B如下:
tbl A
------------------------
column B
10
10
20
20
50
50
40
那么如何删除重复记录?例如。在上面的列中有两个" 10" s,因此只有一个应该被删除。这是条件,如何实现呢?
答案 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);