以下两个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一起使用。
答案 0 :(得分:4)
您的第二个查询将有效
因为在第一行中,选择了具有状态0的前十行,然后在这种情况下完成了顺序,所提取的前十行不需要处于最高顺序