加入收藏 | 设为首页 | 会员中心 | 我要投稿 东莞站长网 (https://www.0769zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长百科 > 正文

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

发布时间:2021-01-16 23:40:04 所属栏目:站长百科 来源:网络整理
导读:以下两个SQL语句中的哪一个将返回所需的结果集(即状态= 0和最高StartTimes的十行)? 两个语句是否总是返回相同的结果集(StartTime是唯一的)? SELECT * FROM MyTable WHERE Status=0 AND ROWNUM = 10 ORDER BY StartTime DESCSELECT * FROM ( SELECT * FROM

以下两个SQL语句中的哪一个将返回所需的结果集(即状态= 0和最高StartTimes的十行)?

两个语句是否总是返回相同的结果集(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数据库的查询中隐含限制子句,并且有兴趣理解与oracle db一起使用的上述语句(使用limit Vs rownum)的任何差异.

解决方法

您的第二个查询将起作用

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

(编辑:东莞站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!