在oracle SQL语句中结合order by子句使用rownum

时间:2012-05-03 11:49:19

标签: sql oracle

以下两个SQL语句中的哪一个将返回所需的结果集(即状态= 0和最高StartTime的十行)?

两个语句是否总是返回相同的结果集(StartTime是唯一的)?

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对这些随机行进行排序,这绝对不是我想要的。 根据我在that answer中学到的内容,第二个语句的order by子句是多余的,可以通过优化器删除,这也不是我想要的。


我要求similar question在查询SQLite数据库时隐含limit子句,并且有兴趣理解与上述语句的任何差异(使用limit Vs rownum )与oracle db一起使用。

1 个答案:

答案 0 :(得分:4)

您的第二个查询将有效

因为在第一行中,选择了具有状态0的前十行,然后在这种情况下完成了顺序,所提取的前十行不需要处于最高顺序