CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Oracle >  基础和管理

求个sql

楼主superMCHK(superMCHK)2006-07-04 08:39:43 在 Oracle / 基础和管理 提问

求个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

相关问题

关键词

得分解答快速导航

  • 帖主:superMCHK
  • yqwd911
  • xiaoxiao1984

相关链接

  • Oracle类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo