با سلام
یکی از مهمترین خصوصیات اوراکل توانایی شناسایی و حذف سطرهای تکراری یک جدول است. این کار به روش های گوناگونی صورت می پذیرد :
1-یکی از بهترین روش ها Join کردن جدول با خودش است مانند مثال زیر :
select
book_unique_id,
page_seq_nbr,
image_key
from
page_image a
where
rowid >
(select min(rowid) from page_image b
where
b.key1 = a.key1
and
b.key2 = a.key2
and
b.key3 = a.key3
);
2-به نظرم از تابع Rank نیز می توان برای این کار استفاده کرد، مانند مثال زیر :
delete from $table_name where rowid in
(
select "rowid" from
(select "rowid", rank_n from
(select rank() over (partition by $primary_key order by rowid) rank_n, rowid as "rowid"
from $table_name
where $primary_key in
(select $primary_key from $table_name
group by $all_columns
having count(*) > 1
)
)
)
where rank_n > 1
)