Using rownum in oracle SQL statement in combination with order by clause
以下两个SQL语句中的哪一个将返回所需的结果集(即状态为0且开始时间最高的十行)?
这两个语句是否总是返回相同的结果集(starttime是唯一的)?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | SELECT * FROM MyTable WHERE STATUS=0 AND ROWNUM <= 10 ORDER BY StartTime DESC SELECT * FROM ( SELECT * FROM MyTable WHERE STATUS=0 ORDER BY StartTime DESC ) WHERE ROWNUM <= 10 |
背景
我的dbadmin告诉我,第一条语句首先将表限制为10行,然后按starttime对这些随机行排序,这显然不是我想要的。根据我在那个答案中学到的内容,第二条语句的ORDER BY子句是多余的,可以由优化器删除,这也不是我想要的。
我提出了一个类似的问题,在查询到一个sqlite数据库时,考虑到
您的第二个查询将起作用
因为在第一行中,选择了状态为0的前十行,然后完成了ORDER BY,在这种情况下,提取的前十行不需要处于最高顺序。