使用sql在oracle上删除重复数据失败

问题描述 投票:0回答:1

我有一个表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是重复的,我想删除所有三个重复的数据,而只希望我的表中有一个数据。所以,我尝试过

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

我如何获得期望的输出?

oracle oracle12c
1个回答
0
投票

您的表似乎缺少主键列,这是一个大问题。假设实际上有一个主键列PK,我们可以尝试连接:DELETE FROM abc t1 INNER JOIN ( SELECT t.*, ROW_NUMBER() OVER (PARTITION BY acc, subgroup ORDER BY pk) rn FROM abc t ) t2 ON t1.pk = t2.pk WHERE t2.rn > 1;

请注意,如果您可以保留原始数据,那么最方便的做法可能是创建一个独特的视图:

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

© www.soinside.com 2019 - 2024. All rights reserved.