使用 sql 删除 oracle 中的重复数据失败

Deletting duplicate data on oracle using sql failed

我有一个 table abc 作为:

acc   subgroup
720V  A
720V  A
720V  A
720V  A
111   C
222   D
333   E

我的预期输出是:

    acc   subgroup
    720V  A
    111   C
    222   D
    333   E

因为 720V A 是重复的,所以我想删除所有三个重复数据,并且只想要 table 中的一个数据。 所以,我尝试了

DELETE FROM (
select t.*,rownum rn from abc  t where acc='720V') where rn>1;

所以,我得到的错误是:

ORA-01732: data manipulation operation not legal on this view

如何获得预期的输出?

你的table好像少了一个主键列,这是个大问题。假设实际上 主键列 PK,我们可以尝试使用 ROW_NUMBER 来识别任何 "duplictes":

DELETE
FROM abc t1
WHERE pk IN (SELECT pk
             FROM (
                 SELECT t.pk, ROW_NUMBER() OVER (PARTITION BY acc, subgroup ORDER BY pk) rn
                 FROM abc t) x
             WHERE rn > 1
);

请注意,如果您可以忍受保留原始数据,那么最权宜之计可能是创建一个独特的视图:

CREATE VIEW abc_view AS
SELECT DISTINCT acc, subgroup
FROM abc;