我有一张桌子x_visa。我想删除此表中的重复列。
我正在使用的查询是:
select * from (SELECT x_visa.*,
ROW_NUMBER() over (partition by effective_start_date, effective_end_date, person_id,
business_group_id, legislation_code , current_visa_permit, visa_permit_type, visa_permit_id, configuration_id
order by person_id) AS rn
from x_visa) T
WHERE rn > 1 );
delete语句发出错误:ORA-01752:如果没有一个密钥保留表,则无法从视图中删除
delete from
(select * from (SELECT x_visa.*,
ROW_NUMBER() over (partition by effective_start_date, effective_end_date, person_id,
business_group_id, legislation_code , current_visa_permit, visa_permit_type, visa_permit_id, configuration_id
order by person_id) AS rn
from x_visa) T
WHERE rn = 1 );
是否有解决方法从此表中删除重复数据?
答案 0 :(得分:2)
每行都有rowid
个标识符。因此,您可以删除查询结果中的rowid位置。
delete from x_visa where rowid in (/*YOUR QUERY*/);
所以我们有:
delete from x_visa where rowid in (select r from (SELECT x_visa.rowid r, x_visa.*,
ROW_NUMBER() over (partition by effective_start_date, effective_end_date, person_id,
business_group_id, legislation_code , current_visa_permit, visa_permit_type, visa_permit_id, configuration_id
order by person_id) AS rn
from x_visa) T
WHERE rn > 1 ))