2013-05-30 55 views

回答

0
工作

in oracle它是

select * from mytable where rownum < 11 

替代方案是一個分析函數,但mysql不支持。

+0

我相信@abderrahim_05想要一個可以與它們一起工作而無需任何修改的SQL。 – invisal

+0

嗯,我正在研究必須適用於Oracle和MySQL的應用程序。 –

+0

我想要一些在兩個DBMS上工作的查詢 –

0

假設有完善的自動increasement(無序號會被跳過)字段並沒有其他條件

得到最後5個記錄

SELECT * FROM account 
HAVING (SELECT MAX(id) FROM account) - 5 < id 

要得到第5個記錄

SELECT * FROM account 
HAVING (SELECT MIN(id) FROM account) + 5 > id 
1

如果您的表具有唯一的id列(或列的組合),則可以執行以下操作:

select t.* 
from t 
where (select count(*) from t t2 where t2.id <= t.id) <= 10; 

where子句中的相關子查詢是標準SQL語法,因此它應該在任何數據庫中運行。

小桌子上的表現應該沒問題。這將通過t(id)索引進行改進。

0

我不知道沒有數據庫抽象層的解決方案,尤其是如果要執行此解決方案。

即使您發現了針對此特定問題的解決方案,在數據庫可移植性的道路上仍會出現另外99個問題。我已經在類似問題的答案中發佈了我的經驗here

對於這個特定問題的好消息是,對於DB2,PostgreSQL,Oracle和MySql,您可以簡單地打包/擴展查詢以成爲具有限制的查詢。但是你需要在應用程序的某個地方處理它。

相關問題