我试图删除表中的重复行,但它给了我一个错误
SQL Error: ORA-01732: data manipulation operation not legal on this view
01732. 00000 - "data manipulation operation not legal on this view"
* Cause:
* Action:
以下是我的疑问:
delete from
(
SELECT A.*,
row_number() over (partition by x,y order by y) as dup
FROM table A
WHERE x='13' AND EXTRACT(YEAR FROM y)='2020'
) A
where dup>1
4条答案
按热度按时间nbysray51#
如果
y
是唯一的,则通常使用:你也可以使用
rowid
--哪怕y
不是唯一的:tquggr8v2#
你可以选择
rowid
要删除的,然后使用in
删除条件:eqzww0vc3#
一个简单的技巧是使用
EXISTS
具体如下:mqxuamgl4#
另一个标准模式是:
哪里
y
是一个或多个重复的键(例如。customer_id
)以及z
排序键允许您选择要保留的“第一行”或“最后一行”(例如。created_date
,如果您在多天内创建了同一个客户,并且希望保留第一个客户并删除其余客户)。你的例子中的这一部分似乎没有意义:
因为每个分区中的所有内容都已经具有相同的
x
以及y
. 您可能希望按不属于分区键的内容排序。