是否有兼容Oracle和MySql的解决方案来限制查询返回的行数?
例如在mysql中有LIMT子句
SELECT * FROM myTable LIMT 10;
在Oracle中,我们在rownum列上使用条件
我想要一些适用于MySQL和Oracle的代码
答案 0 :(得分:1)
如果您的表具有唯一的id列(或列组合),则可以执行以下操作:
select t.*
from t
where (select count(*) from t t2 where t2.id <= t.id) <= 10;
where
子句中的相关子查询是标准SQL语法,因此它应该在任何数据库中运行。
小桌子上的表现应该没问题。它将通过t(id)
上的索引进行改进。
答案 1 :(得分:0)
在oracle中是
select * from mytable where rownum < 11
替代方案是分析函数,但mysql不支持。
答案 2 :(得分:0)
假设有完美的自动增加(没有数字被跳过)字段而没有其他条件
获取最后5条记录
SELECT * FROM account
HAVING (SELECT MAX(id) FROM account) - 5 < id
获取前5条记录
SELECT * FROM account
HAVING (SELECT MIN(id) FROM account) + 5 > id
答案 3 :(得分:0)
我不知道没有数据库抽象层的解决方案,特别是如果要执行此解决方案。
即使您找到了针对此特定问题的解决方案,在数据库可移植性方面也会出现另外99个问题。我已经在类似问题here
的答案中发布了我的经验这个特定问题的好消息是,对于DB2,PostgreSql,Oracle和MySql,您可以简单地将查询包装/扩展为具有限制的查询。但是你需要在你的应用程序中处理它。