4
我正在寻找一个SQL查询到在Oracle表将保留在表中的记录n个,并删除运行,其余SQL删除最早的记录表中的
我尝试以下
delete from myTable where pk not in
(SELECT pk FROM myTable where rownum <5 order by created DESC)
但现在看来,我不能在嵌套选择order by
。
任何帮助表示赞赏
我正在寻找一个SQL查询到在Oracle表将保留在表中的记录n个,并删除运行,其余SQL删除最早的记录表中的
我尝试以下
delete from myTable where pk not in
(SELECT pk FROM myTable where rownum <5 order by created DESC)
但现在看来,我不能在嵌套选择order by
。
任何帮助表示赞赏
当您使用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
)
还有很多其他的方法来写这个。如果桌子很大,大部分的行都会被删除,那么这可能会更快:
delete from myTable where created <
(SELECT MIN(created) FROM
(SELECT created FROM myTable order by created DESC)
where rownum <5
)
明天我们就开始行动吧。 – 2010-06-28 09:00:59
谢谢你,做了一个梦,欣赏优化版本 – Liam 2010-06-28 09:23:35