我观察到可以按如下方式使用 rownum:
1) select * from emp where rownum<5;
2) select * from emp where rownum<=5;
3) select * from emp where rownum=1;
Run Code Online (Sandbox Code Playgroud)
所有这些查询都返回预期的输出。说表 emp 有 7 行,然后第一个查询返回 4 行,第二个返回 5 行,第三个返回 1 行。但是当我尝试使用类似的东西时:
4) select * from emp where rownum=5;
5) select * from emp where rownum>5;
6) select * from emp where rownum>=5;
7) select * from emp where rownum between 5 and 10;
Run Code Online (Sandbox Code Playgroud)
在所有这些情况下,它返回 0 行。为什么会这样?这有什么具体原因吗?
这是因为 rownum 是一个伪列,它在应用 where 子句后对结果集中的行进行计数。
来自Oracle 文档:-
测试大于正整数的 ROWNUM 值的条件始终为假。例如,此查询不返回任何行:
SELECT *
FROM employees
WHERE ROWNUM > 1;
Run Code Online (Sandbox Code Playgroud)
获取的第一行被分配为 1 的 ROWNUM,并使条件为假。要提取的第二行现在是第一行,并且还分配了一个 ROWNUM 为 1 并使条件为假。随后所有行都无法满足条件,因此不会返回任何行。
您还可以使用 ROWNUM 为表的每一行分配唯一值,如下例所示:
UPDATE my_table
SET column1 = ROWNUM;
Run Code Online (Sandbox Code Playgroud)
您可能会发现这些参考资料很有帮助:-
| 归档时间: |
|
| 查看次数: |
4422 次 |
| 最近记录: |