【问题标题】:Solution Compatible Oracle and MySQL for LIMIT clause解决方案 兼容 Oracle 和 MySQL for LIMIT 子句
【发布时间】:2013-05-26 08:46:51
【问题描述】:

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

例如在mysql中有LIMT子句

SELECT * FROM myTable LIMT 10;

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

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

【问题讨论】:

    标签: mysql oracle limit compatibility clause


    【解决方案1】:

    我不知道没有数据库抽象层的解决方案,特别是如果要执行此解决方案。

    即使您找到了解决这个特定问题的方法,在实现数据库可移植性的道路上还会遇到另外 99 个问题。我在回答类似问题here 时发布了我的经验

    这个特定问题的好消息是,对于 DB2、PostgreSql、Oracle 和 MySql,您可以简单地包装/扩展查询以成为有限制的查询。但是您需要在应用程序的某个地方处理这个问题。

    【讨论】:

      【解决方案2】:

      如果您的表有唯一的 id 列(或列组合),您可以执行以下操作:

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

      where 子句中的相关子查询是标准 SQL 语法,因此它应该在任何数据库中运行。

      在小桌子上性能应该没问题。可以通过t(id) 上的索引来改进它。

      【讨论】:

        【解决方案3】:

        假设有完美的自增(不跳过数字)字段且没有其他条件

        获取最后 5 条记录

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

        获取前 5 条记录

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

        【讨论】:

          【解决方案4】:

          在 oracle 中是

          select * from mytable where rownum < 11
          

          替代方法是分析函数,但 mysql 不支持。

          【讨论】:

          • 我相信@abderrahim_05 想要一个无需任何修改即可与它们一起使用的 SQL。
          • 嗯,我正在开发必须同时适用于 Oracle 和 MySQL 的应用程序。
          猜你喜欢
          • 2012-01-25
          • 2011-02-18
          • 2011-02-05
          • 2021-03-20
          • 2017-03-20
          • 1970-01-01
          • 2016-03-25
          • 1970-01-01
          • 2017-08-03
          相关资源
          最近更新 更多