1

这是我的 SQL 查询:

select * from TABLE T where ROWNUM<=100

如果我执行这个然后重新执行这个,我不会得到相同的结果。为什么?

另外,在 sybase 系统上,如果我执行

set rowcount 100
select * from TABLE

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

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

谢谢

4

3 回答 3

3

如果您不在ORDER BY查询中使用,您将按自然顺序获得结果。

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

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

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

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

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

于 2012-08-24T05:18:48.883 回答
1

您需要指定一个ORDER BY. 没有显式子句的查询ORDER BY不能保证返回行的顺序。并从这个结果集中取前 100 行。由于每次行的顺序都可以不同,所以前 100 行也可以是不同的。

于 2012-08-24T05:17:27.260 回答
0

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

select * from
(
   select * from TABLE T ORDER BY rowid
) where ROWNUM<=100
于 2018-07-20T09:59:28.453 回答