解决方案兼容Oracle和MySQL for LIMIT子句

时间:2013-05-30 16:57:06

标签: mysql oracle limit compatibility clause

是否有兼容Oracle和MySql的解决方案来限制查询返回的行数?

例如在mysql中有LIMT子句

SELECT * FROM myTable LIMT 10;

在Oracle中,我们在rownum列上使用条件

我想要一些适用于MySQL和Oracle的代码

4 个答案:

答案 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,您可以简单地将查询包装/扩展为具有限制的查询。但是你需要在你的应用程序中处理它。