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 回答
您的第二个查询将起作用
因为在第一行中,选择了具有状态0的前十行,然后在这种情况下完成了顺序,所获取的前十行不需要处于最高顺序