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