`
qimo601
  • 浏览: 3418615 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

Oracle 如何实现第M行至第N行的有序读取,避免子查询order by出错

阅读更多

我的表结构:

表名:WX_REGULAR_MAINTAIN_WORK

表字段:WORK_ID 、SYSTEM_ID....LAST_EXECUT_TIME、MAINTAIN_PERIOD、DELSIGN

 sql语句作用:从前台传递start、limit参数,读取数据表中start行->(start+limit*页数) 行的记录。

 

string sqlCommand =

 @"select * from (select * from WX_REGULAR_MAINTAIN_WORK order by  (LAST_EXECUT_TIME+ MAINTAIN_PERIOD) ASC)
       where DELSIGN = '0' and rownum <= "+limit+@" and   WORK_ID||SYSTEM_ID not in   

( select WORK_ID||SYSTEM_ID 

   from (select * from WX_REGULAR_MAINTAIN_WORK order by (LAST_EXECUT_TIME+ MAINTAIN_PERIOD) ASC)
   where DELSIGN = '0' and rownum <="+start+"  ) ";

  

   order by 用在from里,是为了在已经按照(LAST_EXECUT_TIME+ MAINTAIN_PERIOD)排序数据集里查找记录。

   rownum 是数据库自带的标识符。

 

  第M行->第N行 按照某字段有序读取简单写成:

 

select * from (select * from a order by a.id) where rownum < = N  and a.id not in ( select * from (select * from a order by a.id) where rownum<=M)

  

实践中出现的问题:

    1,Oracle无法在子查询中实现orader by 。总会出现提示“缺少右括号”。

    2,rownum 只有 rownum < 值 或是rownum <= 值的方法。没有>或>=。

    3,MINUS也可以实现读取第M行至第N行的读取,如果想按照有序排列,只需from 一个有序的select集合。

        例如:

(select   *   from   a   where   rownum<=5)   
   minus   
( select   *   from   a   where   rownum<4 ) 

  

 

        改成:

(select   *   from   (select * from a order by a.id)   where rownum<=5  ) 
 minus   
 (select   *   from   (select * from a order by a.id)   where   rownum<4)

 

 

0
0
分享到:
评论

相关推荐

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

    1.5.6 ORDERBY子句 13 1.6 INSERT语句 14 1.6.1 单表插入 14 1.6.2 多表插入 15 1.7 UPDATE语句 17 1.8 DELETE语句 20 1.9 MERGE语句 22 1.10 小结 24 第2章 SQL执行 25 2.1 Oracle架构基础 25 2.2 SGA-...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 第一章 Oracle入门 一、 数据库概述 数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它产生于距今五十年前。简单来说是本身可视...

    oracle数据库经典题目

    游标的作用是将数据库的中数据检索出来后缓存,可以被PL/SQL程序一行一行的读取并处理。支持一条、多条、零条记录的处理。 游标的基本操作步骤为: (1)声明游标,使用查询来定义游标的列和行 (2)打开游标,使用PL/...

    Oracle9i的init.ora参数中文说明

    对于二进制排序, ORDER BY 查询的比较顺序是以数值为基础的。对于语言排序, 则需要进行全表扫描, 以便将数据按照所定义的语言排序进行整理。 值范围: BINARY 或有效的语言定义名。 默认值: 从 NLS_LANGUAGE 中获得...

    2009达内SQL学习笔记

    like 'M%':M开头的 like '_a%':第二个字符是a的 like '%a%'所有含a的 (“_”表示一个任意字符;“%”表示任意多个任意字符。) 单引号里面的内容,大小写敏感。单引号用来限定字符串, 如果将值与串类型的列...

    PHP基础教程 是一个比较有价值的PHP新手教程!

    传统上网页的交互作用是通过CGI来实现的。CGI程序的伸缩性不很理想,因为它为每一个正在运行的CGI程序开一个独立进程。解决方法就是将经常用来编写CGI程序的语言的解释器编译进你的web服务器(比如mod_perl,JSP)。PHP...

    经典全面的SQL语句大全

     4、说明:子查询(表名1:a 表名2:b) select a,b,c from a where a IN (select d from b ) 或者: select a,b,c from a where a IN (1,2,3)  5、说明:显示文章、提交人和最后回复时间 select a.title,a.username,...

    SQL语句教程.pdf

    子查询 EXISTS CASE 算排名 算中位数 算总合百分比 算累积总合百分比 SQL 语法 无论您是一位 SQL 的新手,或是一位只是需要对 SQL 复习一下的资料仓储业界老将,您 就来对地方了。这个 SQL 教材网站列出常用的 SQL ...

    轻松学C#(图解版)

    第三篇是应用技术篇,主要介绍的是异常处理、文件和流、委托、事件、Lambda表达式、命名空间、预处理器、程序集、运行时类型标识、反射、特性、泛型、LINQ和数据库开发等。 =======================================...

    Java面试宝典2020修订版V1.0.1.doc

    38、表连接、子查询的区别是什么?它们可以相互转化吗?你倾向于用哪种,为什么? 54 39、oracle数据库表的备份及还原 54 40、谈谈你知道的数据库和中间件 54 41、oracle和MySQL的区别 54 42、简述Mysql的InnoDb 55 ...

Global site tag (gtag.js) - Google Analytics