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

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数据库时,考虑到limit子句,我有兴趣理解与Oracle数据库中使用的上述语句(使用limitrownum之间的任何差异。


您的第二个查询将起作用

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