关于数据库查询条件中用RowNum的问题

关于数据库查询条件中用RowNum的问题,第1张

首先你要了解 ROWNUM 的作用 :

ROWNUM是SQL中内置的一个函数,它的作用是:限制返回记录条数(有些类似游标的工作方式),

系统认为这样的函数开始值是 1 , 所以使用

rownum >某个数字 OR rownum = 非1的数字

都是不合法的!!!!!

你第一条SQL语句可以执行成功, 而且只能是一条数据, 这是正常的使用方法之一;

你第二条SQL语句不能执行成功, 你可以来借用 ROWNUM 的使用方法来分析一下;

①SELECT wpt.work_plan_id,wpt.begin_time,wpt.bus_id,wpt.status,RowNum from WORK_PLAN_TABLE wpt 相信你能够明白这条语句执行过后 会返回什么结果集吧!!

②接着把这条语句加上 WHERE 条件

SELECT wpt.work_plan_id,wpt.begin_time,wpt.bus_id,wpt.status,RowNum from WORK_PLAN_TABLE wpt WHERE ROWNUM = wpt.work_plan_id

假设你的表中有两条记录 wpt.work_plan_id 后有两个取值 ,

而在查询中会分别两次对 work_plan_id 进行判断 在这两个值中,如果有一条不满足 ROWNUM 的使用规范, 那么就不会返回任何结果!!

说到这里你应该明白了吧!!! 你的第二条语句违反了ROWNUM 使用规范,所以没有结果返回!!!

rownum和Dual表,应该是Oracle所特有的东西。 SQL Server和Sybase都没有这个,其它的数据库不好说。 rownum关键字,是Oracle为查询返回的行,顺序分配的编号,当然也可以作为Where条件来使用。 Dual表:也是Oracle方便查询而使用的特殊表。Oracle内部机制可以确保该表始终只有一行一列一个X值。 下面是从网上找到的使用临时表的方法,因为没有Sql server环境,未测试,仅供参考: select rownum=identity(int,1,1),id,name into #t from table1 select *

oracle的rownum直接调用必须从1开始

你想要达到第二个效果如下: 原理就是把rownum在子查询中变成真实字段而不是伪列

select *

from (select *,rownum as rn from table ) t

where rn>=18 and rn<36


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/9977436.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-04
下一篇2023-05-04

发表评论

登录后才能评论

评论列表(0条)

    保存