我有一个表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
我如何获得期望的输出?
您的表似乎缺少主键列,这是一个大问题。假设实际上有一个主键列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;