大多数来源,包括Oracle自己的Top-N Queries文章,都提供了类似于以下内容的语法来执行Top-N查询:
SELECT val
FROM (
SELECT val
FROM rownum_order_test
ORDER BY val DESC
)
WHERE ROWNUM <= 5;
Run Code Online (Sandbox Code Playgroud)
这保证给出前5个值; 但是,它是否保证以正确的顺序给予它们?这个问题引用维基百科,但另有说明:
尽管某些数据库系统允许在子选择或视图定义中指定ORDER BY子句,但其中的存在无效.
这是否意味着上述代码不保证任何订购,并且需要额外的ORDER BY,或者是特殊情况?
SELECT val
FROM (
SELECT val
FROM rownum_order_test
ORDER BY val DESC
)
WHERE ROWNUM <= 5
ORDER BY val DESC; -- Is this line necessary?
Run Code Online (Sandbox Code Playgroud)
编辑:假设外部查询将直接执行(不嵌套在另一个查询中).我提出这个问题是因为感觉像是一个明显的遗漏,没有任何消息来源(包括甲骨文)不愿意提到它的需要ORDER BY,尽管从这样的前n个查询中可以直观地预期排序.
| 归档时间: |
|
| 查看次数: |
90 次 |
| 最近记录: |