求个sql
求个sql
我用的数据库是oracle的在做分页的时候,没有像mysql的limit函数我改怎么写呢,
我在网上找了一些,但都不行(在加入一些排序条件下),我自己也写了一些如下
1.$sql=select * from( SELECT row_number() over(order by travel_dt4 desc) rnum,TRAVEL_ID,TRAVEL_NO,TRAVEL_DES,TRAVEL_AFF_ID,TRAVEL_DT4,TRAVEL_USER1_ID FROM t_travel where travel_loc='deal_finish' ) where rnum >$offset and rnum <=$pagesize";
2.$sql="SELECT rownum,TRAVEL_ID,TRAVEL_NO,TRAVEL_DES,TRAVEL_AFF_ID,TRAVEL_DT4,TRAVEL_USER1_ID
FROM (select * from t_travel order by TRAVEL_DT4 desc) where travel_loc='deal_finish' and rownum<=$pagesize
minus select rownum,TRAVEL_ID,TRAVEL_NO,TRAVEL_DES,TRAVEL_AFF_ID,TRAVEL_DT4,TRAVEL_USER1_ID
from (select * from t_travel order by TRAVEL_DT4 desc) where travel_loc='deal_finish'and rownum<=$offset";
上面的语句在oracle8.0.6以上的版本都可以运行,但是1的运行速度太慢了(才30000条记录),2是可以的,
速度还可以,就是2运行在oracle8.0.6以下的版本就报错,说在order by处缺少右括号。
我想问下有好的sql语句吗,我写的语句可能也有问题,望大家帮帮忙
问题点数:20、回复次数:6Top
1 楼yqwd911(windy)回复于 2006-07-04 09:15:44 得分 5
不明白第二个语句为什么要那样写?
这样写结果一样啊,不见得比你的慢
SELECT rownum,TRAVEL_ID,TRAVEL_NO,TRAVEL_DES,TRAVEL_AFF_ID,TRAVEL_DT4,TRAVEL_USER1_ID
FROM (select * from t_travel order by TRAVEL_DT4 desc) where travel_loc='deal_finish' and rownum<=$pagesize and rownum>$offset
Top
2 楼xiaoxiao1984(笨猫儿)回复于 2006-07-04 09:17:39 得分 15
select TRAVEL_ID ,TRAVEL_NO ,TRAVEL_DES ,TRAVEL_AFF_ID ,TRAVEL_DT4 ,TRAVEL_USER1_ID from
(select rownum as rid ,TRAVEL_ID ,TRAVEL_NO ,TRAVEL_DES ,TRAVEL_AFF_ID ,TRAVEL_DT4 ,TRAVEL_USER1_ID from (select * from t_travel where travel_loc='deal_finish' order by TRAVEL_DT4 desc) where rownum <=$pagesize )where rid >$offset ;
Top
3 楼xiaoxiao1984(笨猫儿)回复于 2006-07-04 09:20:04 得分 0
TO yqwd911(windy) :
直接使用 rownum >= a and rownum <= b 这样是取不到纪录的
rownum 不是真实的列,只是一个伪列Top
4 楼yqwd911(windy)回复于 2006-07-04 09:37:10 得分 0
哦,没有注意那个是rownumTop
5 楼superMCHK(superMCHK)回复于 2006-07-04 09:41:29 得分 0
是的rownum是取不到第几条到第几条记录的Top
6 楼superMCHK(superMCHK)回复于 2006-07-04 09:51:29 得分 0
xiaoxiao1984(笨猫一只^_^) 的sql是对的,我取试试看看速度怎么样先给分了Top




