我有一个表XYZ(ID主键,名称)。该表有超过10000行。 我想一次处理1000行。为此,我必须先从表中输入1000行,然后根据结果更新表。对于我可以使用
获取的前1000行 select * from XYZ where rownum >=1 and rownum <= 1000
但是对于接下来的1000行,我不知道如何编写查询,因为如果我写
select count(*) from XYZ where rownum >=1000 and rownum < 2000
查询给出0行。任何想法如何编写查询。请帮助。我正在使用Oracle 11g数据库。
答案 0 :(得分:3)
rownum
不是真正的列,它是在生成行时生成的伪列,从1开始向上计数。
所以,你的查询:
select * from XYZ where rownum >= 1000 and rownum <= 2000
不返回任何行。为什么? Oracle生成第一行并为其指定一个1的rownum。然后检查它是否应包含在结果集中。 Rownum&lt; 1000,所以没有。它继续下一行,并使用下一个最大的尚未使用的rownum ...仍然是1.重复直到表的结尾。
您需要引入子选择以将rownum
转换为实际列:
select * from
(select rownum r, * from xyz) inner
where
inner.r >= 1000 and inner.r <= 2000
获得你真正想要的结果。