oracle怎么根据行号查询数据,想查t表的第10行的所有数据,select * from t where rownum=10,这样写不行
1个回答
展开全部
如果非要用ROWNUM的话 可以这样
SELECT *
FROM (SELECT T.* , ROWNUM ROW_NO FROM EMP T ORDER BY T.EMPNO )
WHERE ROW_NO = 10
排序很重要,不排序的话没有办法保证取出来的ROW_NO = 10 就是你想要的
更多追问追答
追问
多谢大神,那如果update 呢
追答
等等 刚才那个可能有问题。。。
SELECT *
FROM (
SELECT T.*, ROWNUM ROW_NO
FROM (SELECT * FROM EMP ORDER BY ENAME ) T )
WHERE ROW_NO = 10
得套两个子查询,第一个进行排序,第二个给结果集加上ROWNUM,第三个通过ROW_NO进行筛选
这样也可以
SELECT *
FROM (SELECT ROW_NUMBER() OVER(ORDER BY ENAME) ROW_NO, T.*
FROM EMP T)
WHERE ROW_NO = 10
用ROWNUM去操作数据存在非常容易出问题,尽量不要用这种方式,你先更新第十条数据还有什么其他的特征么,有其他什么唯一的标识,比如编号啊一类的
这是一个用ROWID进行定位的SQL,我试了执行是没什么问题的,但是这么用很不合理
UPDATE EMP
SET EMP.EMPNO = 7934
WHERE ROWID =
(SELECT ROWID
FROM (SELECT ROW_NUMBER() OVER(ORDER BY ENAME) ROW_NO, ROWID, T.*
FROM EMP T)
WHERE ROW_NO = 10)
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询