带有rownum和orderBy的Oracle查询返回错误记录

带有rownum和orderBy的Oracle查询返回错误记录,oracle,oracle10g,Oracle,Oracle10g,在使用Oracle10g的rownum时,我得到了一个令人困惑的结果 第一个问题 ==>返回1条记录 使用rownum进行第二次查询 ==>返回2条记录 如果我删除“orderby”,那么它将返回1条记录 有人能帮我解释一下这个行为吗?也许你想要这个功能: select * from ( select X.*, rownum r from ( select * from A where name like '%test' order by name asc ) X ) w

在使用Oracle10g的rownum时,我得到了一个令人困惑的结果

第一个问题 ==>返回1条记录

使用rownum进行第二次查询 ==>返回2条记录

如果我删除“orderby”,那么它将返回1条记录


有人能帮我解释一下这个行为吗?

也许你想要这个功能:

select * from (
  select X.*, rownum r from (
    select * from A where name like '%test'
    order by name asc
  ) X
)
where r <= 2
或者

select * from (
  select A.*, ROW_NUMBER() OVER (ORDER BY name) r
  from A where name like '%test'
)
where r <= 2

我无法复制它。你能给出一些示例数据来说明你的问题吗?以防万一这是一个真正的问题,它敲响了一个非常模糊的钟声,你的确切版本和补丁级别是什么;您的NLS_排序和NLS_补偿设置是什么?返回第二行中的内容-是重复的,还是根本不匹配%test?谢谢您的建议!在刷新了原始查询的统计数据后,它又恢复了正常工作。我知道它的统计数据会影响它计算执行/解释计划的方式,但从未听说过它会以这种方式产生影响。
select * from (
  select X.*, rownum r from (
    select * from A where name like '%test'
    order by name asc
  ) X
)
where r <= 2
select * from (
  select A.*, ROW_NUMBER() OVER (ORDER BY name) r
  from A where name like '%test'
)
where r <= 2