使用“限制”查询不返回结果[重复]

Posted

技术标签:

【中文标题】使用“限制”查询不返回结果[重复]【英文标题】:Query with "limit" not returning results [duplicate] 【发布时间】:2013-03-05 12:24:21 【问题描述】:

这是我的查询:

select * 
  from (SELECT "MYTABLE".* FROM "MYTABLE" ORDER BY "COMPANY" ASC, "SURNAME" ASC) 
 where ROWNUM between 0 and 20

按预期工作,但是当我尝试获取接下来的 20 条记录时:

select * 
  from (SELECT "MYTABLE".* FROM "MYTABLE" ORDER BY "COMPANY" ASC, "SURNAME" ASC) 
 where ROWNUM between 20 and 40

结果集为空?为什么会这样?我该怎么做才能获得接下来的 20 条记录?

【问题讨论】:

你确定20之后有结果吗?如果您的结果介于 0 到 40 之间,您会得到 40 个结果吗? 因为你没有正确使用ROWNUM:oracle.com/technetwork/issue-archive/2006/06-sep/… 是的,返回40条结果 【参考方案1】:

您必须嵌套 rownum ,因为 rownum 仅在获取行后才会增加。所以说rownum > 1 永远不会返回一行。 例如

select *
  from (select a.*, rownum r 
          from (select mytable.*
                  from mytable 
                 order by company asc, surname asc) a
         where rownum <= 40
       )
 where r >= 20
 order by r;

或者你可以使用row_number()分析

select *
  from (select mytable.*, row_number() over (order by company asc, surname asc) rn
          from mytable) 
 where rn between 20 and 40
 order by rn;

【讨论】:

以上是关于使用“限制”查询不返回结果[重复]的主要内容,如果未能解决你的问题,请参考以下文章

LINQ 和 SQL 中看似等效的查询返回不同的结果 [重复]

sqlalchemy 限制从第一次连接返回的结果,并让后续连接只连接有限的结果

Oracle 查询:如何将返回的记录限制为计数 > 1 但显示完整结果的记录?

PDO 准备语句限制不起作用 [重复]

如何计算从 MySQL 查询返回的总结果有限制?

当同一列中的值不匹配但不同列重复时将返回结果的 SQL 查询