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

来源:百度知道 编辑:UC知道 时间:2024/05/13 11:33:32
用select wpt.work_plan_id,wpt.begin_time,wpt.bus_id,wpt.status,RowNum from WORK_PLAN_TABLE wpt
where RowNum = 1 and wpt.work_plan_id = 1查询和用用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 查到的结果完全不同,用前者能查到一条记录,用后者查不到任何记录,但两者说的不是同一个意思吗,而且即使有差别也应该是后者可能查到的记录更多吧,为什么这样呢,真不理解,望高人指点

首先你要了解 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 是伪列,也就是说是在其他条件查询结果都执行完之后才创建的一列值,从1开始编号,因此RowNum 只能和常量进行比较操作,且只能是小于或小于等于,或等于1. 第二中写发中执行时RowNum这个伪列中的值都为空,因此什么也查不出来.
但第一个查询先执行RowNum =1以外的条件是有结果的.