使用 while Rownum 从 db 中检索仅在 rownum = 1 时有效
retrieveing from db using while Rownum works only when rownum = 1
我正在尝试根据 rownum 值从数据库中检索数据,
select * from MY_TABLE WHERE ROWNUM = 4
只在rownum = 1时给出结果,否则为空。尽管我确定我的 table 有更多行!
name age
-------- -------- -------
1 Joe 10
2 Leo 3
3 Adam 9
比如上面的table我只能得到joe的信息,说while rownum = 1,其他的就没有结果
ROWNUM
returns 一个数字,表示 Oracle select 来自 table 的行的顺序。第一行有 ROWNUM
1,第二行有 2 等等
查询如
SELECT * FROM table
WHERE ROWNUM = 2
获取的第一行有 ROWNUM
1,并使 where 条件为假。下一行,第二行,现在是第一行并且有 ROWNUM
1,并使 where 条件为假,等等
假设这是你的 table:
SQL> select * from my_table;
NAME AGE
-------------------- ----------
Joe 10
Leo 3
Adam 9
Yura 1
ROWNUM
不能与“=”符号一起使用(Nishant Gupta 告诉您原因):
SQL> select * from my_table where rownum = 3;
no rows selected
SQL>
但是,您可以使用“<=”:
SQL> select * from my_table where rownum <= 3;
NAME AGE
-------------------- ----------
Joe 10
Leo 3
Adam 9
SQL>
或者,如果您无论如何都想使用“=”(因为您只需要第三个值),则必须使用选择 ROWNUM
的内联视图(并为其取别名,如 "RN" - 例如)连同 ORDER BY
子句,例如
SQL> select name, age
2 from (select rownum rn, name, age
3 from my_table
4 order by age
5 )
6 where rn = 3;
NAME AGE
-------------------- ----------
Adam 9
SQL>
或者,使用ROW_NUMBER
解析函数:
SQL> select name, age
2 from (select name, age, row_number() over (order by age) rn
3 from my_table
4 )
5 where rn = 3;
NAME AGE
-------------------- ----------
Adam 9
SQL>
我正在尝试根据 rownum 值从数据库中检索数据,
select * from MY_TABLE WHERE ROWNUM = 4
只在rownum = 1时给出结果,否则为空。尽管我确定我的 table 有更多行!
name age
-------- -------- -------
1 Joe 10
2 Leo 3
3 Adam 9
比如上面的table我只能得到joe的信息,说while rownum = 1,其他的就没有结果
ROWNUM
returns 一个数字,表示 Oracle select 来自 table 的行的顺序。第一行有 ROWNUM
1,第二行有 2 等等
查询如
SELECT * FROM table
WHERE ROWNUM = 2
获取的第一行有 ROWNUM
1,并使 where 条件为假。下一行,第二行,现在是第一行并且有 ROWNUM
1,并使 where 条件为假,等等
假设这是你的 table:
SQL> select * from my_table;
NAME AGE
-------------------- ----------
Joe 10
Leo 3
Adam 9
Yura 1
ROWNUM
不能与“=”符号一起使用(Nishant Gupta 告诉您原因):
SQL> select * from my_table where rownum = 3;
no rows selected
SQL>
但是,您可以使用“<=”:
SQL> select * from my_table where rownum <= 3;
NAME AGE
-------------------- ----------
Joe 10
Leo 3
Adam 9
SQL>
或者,如果您无论如何都想使用“=”(因为您只需要第三个值),则必须使用选择 ROWNUM
的内联视图(并为其取别名,如 "RN" - 例如)连同 ORDER BY
子句,例如
SQL> select name, age
2 from (select rownum rn, name, age
3 from my_table
4 order by age
5 )
6 where rn = 3;
NAME AGE
-------------------- ----------
Adam 9
SQL>
或者,使用ROW_NUMBER
解析函数:
SQL> select name, age
2 from (select name, age, row_number() over (order by age) rn
3 from my_table
4 )
5 where rn = 3;
NAME AGE
-------------------- ----------
Adam 9
SQL>