我面临着一个奇怪的问题,即同一个查询返回不同的结果.
我的查询是:
SELECT * FROM TX_HISTORY WHERE acct = 7 AND ROWNUM
发生的事情是,我知道对于这个帐户,tx_history中有超过100条记录.我想根据处理日期获得前100条记录.我的这个帐户的数据是我有2004年至2011年的记录
问题是有时它正确地显示从2004年开始的100条记录 - 但有时它会显示我从2005年开始的100条记录
我读到这可以通过以下方式解决:
SELECT * FROM (select * from TX_HISTORY WHERE acct = 7 ORDER BY acct,processing_date) where rownum
所以在我之前的查询中是:1>我的理解是在rownum <= 100之后应用order by并且oracle返回的结果是随机顺序,其中行num是过滤的
虽然不明白为什么结果会有所不同谢谢,〜akila
如果您没有指定任何排序(在这种情况下,正如您已经发现的那样,您没有订购要检索的数据,您只能在之后进行排序),则由数据库按照它认为合适的任何顺序返回它们.
例如,它可以按照它们存储的顺序开始读取行,这些行随着数据的更新而变化.它也不必从表的顶部开始,它可以从缓冲区缓存中已有的块开始.
由于您没有指定订单,因此DB会选择(它认为是什么)在这个特定时刻可用的最便宜的方式.