使用Row_Number从数据库中获取特定数量的行;结果不一致

时间:2012-08-24 05:14:39

标签: sql sybase

这是我的SQL查询

select * from TABLE T where ROWNUM<=100

如果我执行此操作然后重新执行此操作,我将得到相同的结果。为什么呢?

此外,如果我执行

,则在sybase系统上
set rowcount 100
select * from TABLE

即使重新执行,我也得到相同的结果?

有人可以解释原因吗?并为RowNum提供可能的解决方案

由于

3 个答案:

答案 0 :(得分:3)

如果您在查询中未使用ORDER BY,则会以自然顺序获得结果。

自然顺序是目前数据库中最快的顺序。

可能的解决方案是ORDER BY您的主键,如果它是INT

SELECT TOP 100 START AT 0 * FROM TABLE
ORDER BY TABLE.ID;

如果您的主键不是按顺序递增的整数,并且您没有其他要排序的列(例如timestamp),则可能需要创建一个额外的列SORT_ORDER INT并增加自动插入时使用自动增量列或序列和插入触发器,具体取决于数据库。

确保在该列上创建索引以加快查询速度。

答案 1 :(得分:1)

您需要指定ORDER BY。没有显式ORDER BY子句的查询不保证返回行的顺序。从这个结果集中取出前100行。作为每次行可以不同的顺序,也可以是前100行。

答案 2 :(得分:0)

您需要先使用ORDER BY,然后再使用ROWNUM。如果不遵循此顺序,将会得到不一致的结果。

select * from
(
   select * from TABLE T ORDER BY rowid
) where ROWNUM<=100