MOVE
丢弃不满足条件的数据
12c+版本支持,https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/ALTER-TABLE.html#GUID-552E7373-BF93-477D-9DA3-B2C9386F2877
FILM_ID | TITLE | UK_RELEASE_DATE | LENGTH_IN_MINUTES | BBFC_RATING |
1 | Frozen | 06-DEC-13 | 102 | PG |
2 | Frozen | 06-DEC-13 | 102 | PG |
3 | Frozen | 06-DEC-13 | 100 | U |
4 | Aladdin | 18-NOV-93 | 90 | U |
5 | Aladdin | 18-NOV-93 | 90 | U |
6 | The Little Mermaid | 12-OCT-90 | 83 | U |
alter table films move including rows where film_id > 4;
将符合条件的数据留下,其他数据丢弃。
FILM_ID | TITLE | UK_RELEASE_DATE | LENGTH_IN_MINUTES | BBFC_RATING |
5 | Aladdin | 18-NOV-93 | 90 | U |
6 | The Little Mermaid | 12-OCT-90 | 83 | U |
按主键
delete from films
where film_id not in
( select max(film_id) over ( partition by TITLE )
from films
);
ROWID
delete from films
where rowid in
( select rowid
from
( select rowid,
row_number() over ( partition by TITLE order by FILM_ID desc) as r
from films
)
where r > 1
);
delete from films
where rowid not in
(select max(rowid) from films t group by TITLE, UK_RELEASE_DATE);
delete from films
where rowid not in
(select min(rowid) from films t group by TITLE, UK_RELEASE_DATE);
PARTITION
ALTER TABLE table_name DROP PARTITION partition_name;