首页 文章

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

提问于
浏览
4

Which of the following two SQL statements will return the desired result set (即状态= 0和最高StartTimes的十行)?

Will both statements always return the same result set (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

Background

我的DBAdmin告诉我,第一个语句将首先将表限制为10行,然后按StartTime对这些随机行进行排序,这绝对不是我想要的 . 根据我在that answer中学到的内容,第二个语句的order by子句是多余的,可以通过优化器删除,这也不是我想要的 .


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

1 回答

  • 4

    您的第二个查询将起作用

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

相关问题