我正在寻找一个在oracle表上运行的SQL查询,它将在表中保留n个记录并删除其余的
我尝试了以下内容
delete from myTable where pk not in
(SELECT pk FROM myTable where rownum <5 order by created DESC)
Run Code Online (Sandbox Code Playgroud)
但似乎我不能order by
在嵌套选择中.
任何帮助赞赏
Ton*_*ews 13
当您使用ORDER BY和ROWNUM时,首先应用ROWNUM,因此您无法获得预期的结果.您可以将SQL修改为:
delete from myTable where pk not in
( SELECT pk FROM
( SELECT pk FROM myTable order by created DESC)
where rownum <5
)
Run Code Online (Sandbox Code Playgroud)
还有很多其他方法可以写这个.如果表很大并且大多数行将被删除,那么这可能会更快:
delete from myTable where created <
( SELECT MIN(created) FROM
( SELECT created FROM myTable order by created DESC)
where rownum <5
)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
7514 次 |
最近记录: |