我正在尝试根据rownum值
从数据库中检索数据select * from MY_TABLE WHERE ROWNUM = 4
它只在rownum = 1时给出结果,否则为空。即使我确定我的桌子有更多的行!
name age
-------- -------- -------
1 Joe 10
2 Leo 3
3 Adam 9
例如上面的表我只能得到乔的信息,说rownum = 1,其他人只是没有结果
答案 0 :(得分:2)
ROWNUM
返回一个数字,表示Oracle从表中选择行的顺序。第一行有ROWNUM
1,第二行有等等。
使用类似
的查询SELECT * FROM table
WHERE ROWNUM = 2
获取的第一行有ROWNUM
1,并使where条件为false。下一行,第二行,现在是第一行,并且ROWNUM
为1,并使where条件为false,等等。
答案 1 :(得分:2)
假设这是你的桌子:
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>
或者,如果您仍然想要使用“=”(因为您只需要第3个值),您将必须使用内联视图选择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>