是否有兼容Oracle和MySql的解決方案來限制查詢返回的行數?解決方案兼容的Oracle和MySQL用於LIMIT子句
例如在MySQL中存在LIMT條款
SELECT * FROM myTable LIMT 10;
在Oracle中,我們使用條件對ROWNUM列
我想一些代碼,無論對於MySQL和Oracle
是否有兼容Oracle和MySql的解決方案來限制查詢返回的行數?解決方案兼容的Oracle和MySQL用於LIMIT子句
例如在MySQL中存在LIMT條款
SELECT * FROM myTable LIMT 10;
在Oracle中,我們使用條件對ROWNUM列
我想一些代碼,無論對於MySQL和Oracle
in oracle它是
select * from mytable where rownum < 11
替代方案是一個分析函數,但mysql不支持。
假設有完善的自動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
如果您的表具有唯一的id列(或列的組合),則可以執行以下操作:
select t.*
from t
where (select count(*) from t t2 where t2.id <= t.id) <= 10;
where
子句中的相關子查詢是標準SQL語法,因此它應該在任何數據庫中運行。
小桌子上的表現應該沒問題。這將通過t(id)
索引進行改進。
我不知道沒有數據庫抽象層的解決方案,尤其是如果要執行此解決方案。
即使您發現了針對此特定問題的解決方案,在數據庫可移植性的道路上仍會出現另外99個問題。我已經在類似問題的答案中發佈了我的經驗here
對於這個特定問題的好消息是,對於DB2,PostgreSQL,Oracle和MySql,您可以簡單地打包/擴展查詢以成爲具有限制的查詢。但是你需要在應用程序的某個地方處理它。
我相信@abderrahim_05想要一個可以與它們一起工作而無需任何修改的SQL。 – invisal
嗯,我正在研究必須適用於Oracle和MySQL的應用程序。 –
我想要一些在兩個DBMS上工作的查詢 –