很奇怪的sql语句的问题,高手速度来

kgeekevan 2009-11-11 06:32:56
SELECT *
FROM (SELECT INNER_TABLE.*, ROWNUM OUTER_TABLE_ROWNUM
FROM (
select * from tableA where tableA.id
in ( ... )

) INNER_TABLE
WHERE ROWNUM <=4) OUTER_TABLE
WHERE OUTER_TABLE_ROWNUM >=1
这个语句用来数据库分页的,查出前4条数据,查出结果为
数据1
数据2
数据3
数据4
但如果我把红色标记的4换成5的话像查询出5条数据,结果为
数据2
数据4
数据5
数据1
数据3
导致该问题的原因不太明白,输出顺便跟什么有关?可以肯定的是跟红色标记的省略号内的内容有关,哪个高手能帮忙解释下?
...全文
228 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
hujun1024 2009-12-23
  • 打赏
  • 举报
回复
SELECT *
FROM (SELECT INNER_TABLE.*, ROWNUM OUTER_TABLE_ROWNUM
FROM (
select * from tableA where tableA.id
in ( ... )

order by ... ) INNER_TABLE
WHERE ROWNUM <=4) OUTER_TABLE
WHERE OUTER_TABLE_ROWNUM >=1

在最底层加个Order BY就可以了
coolhat123 2009-12-17
  • 打赏
  • 举报
回复
oracle默认是根据rowid排序的,不过rowid的排序规则不完全按照数据的前后插入次序
最好加个order by
mir2ming 2009-11-19
  • 打赏
  • 举报
回复
估计他是想根据不同字段来排序
小灰狼W 2009-11-19
  • 打赏
  • 举报
回复
sql会动态的根据页面的需求来排序
这是什么意思
kgeekevan 2009-11-19
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 zhongshun 的回复:]
求一个表中费用为6到10位的记录.
select patname ,price,sort from
(select patname,id,price,rownum as sort from
  (select patname,id,price from bookcenter order by price desc)
  where rownum <=10)
where sort>=6

select patname ,price,sort from
(select patname,id,price,rownum as sort from
  (select patname,id,price from bookcenter order by price desc)
  )
where sort>=6 and sort <= 10

两种方法,最近选一种.
[/Quote]里面加order by 是可以,但我要的是不加order by的情况,里面的sql会动态的根据页面的需求来排序,而不是写死的排序
Gary_zhong 2009-11-12
  • 打赏
  • 举报
回复
求一个表中费用为6到10位的记录.
select patname ,price,sort from
(select patname,id,price,rownum as sort from
(select patname,id,price from bookcenter order by price desc)
where rownum <=10)
where sort>=6

select patname ,price,sort from
(select patname,id,price,rownum as sort from
(select patname,id,price from bookcenter order by price desc)
)
where sort>=6 and sort <= 10

两种方法,最近选一种.
Willowgao 2009-11-12
  • 打赏
  • 举报
回复
order by 不行吗?
palm_civet 2009-11-11
  • 打赏
  • 举报
回复
oracle不保证返回的顺序吧
hebo2005 2009-11-11
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20091109/12/2078b0a5-89ba-4c29-bec8-565dd1773287.html
正好我也个贴子在研究ROWNUM的一些问题,你也可以参考下
hebo2005 2009-11-11
  • 打赏
  • 举报
回复
你不加ORDER BY 的话,是根据读取顺序来决定数据的ROWNUM的
另外说句,ORACLE没有什么默认排序的

17,078

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧