在oracle自动生成的表中操作
找出king所在部门工作年限最大的员工。。
本来查出来的入职最早的那个恰好排在最前面第一行,rownum是一
但是我修改了一些值,排序后,结果入职最早的
还是排在第一行,但是rownum不再是1
可以看出,rownum并不是按照hiredate的先后列来生成的序号。
如果按照下面语句查询,找出来的并不是最先入职的
select * from
(select rownum r,emp.* from emp where deptno =(select deptno from emp where ename ='KING')
order by hiredate) a where a.r=1;
解决办法
可以看出,rownum并不是按照hiredate列来生成的序号。系统是按照记录插入时的顺序给记录排的号,rowid也是顺序分配的。为了解决这个问题,必须使用子查询
select rownum r2, a.* from
(select rownum r,emp.* from emp where deptno =(select deptno from emp where ename ='KING')
order by hiredate) a ;
有的列可以不要,为了便于说明问题,列出2个rownum
加上where rownum=1后就是king的值