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