应该是先取rownum<10的集合,然后在按 ORDER BY 的字段进行排序
解决方案 »
- 在已有数据的情况下怎么增加标识列
- ORA-01109: 数据库未打开
- 这个sql怎么写啊。。。。有人知道吗?
- 查询语句写不出来了,达人们帮帮忙,出出招!
- 如何快速把一个机器的Oracle数据库快速移植到另一台机器上?
- 求oracle11g的注册表安装信息!谢谢!
- xp上安装Oracle出错!信息是ORA-00988:missing or invalid password(s)
- 如何在oracle9i的oracle enterprise manager console里查看各个用户的权限?
- oracle 存储过程中使用execute immediate 创建 临时表
- 关于Oracle同一字段限制两遍的执行效果
- 请问,如果用pl/sql导出一个数据库的表结构?
- 急!急!急!数据库不能自动启动
select * from (select * from t order by ...) where rownum<10
SQL> select * from aaa_csdn_1; ID
----------
9999
2423
434
5412
6532SQL> SELECT * FROM AAA_CSDN_1 WHERE (ROWNUM < 5); ID
----------
9999
2423
434
5412SQL> SELECT * FROM AAA_CSDN_1 WHERE (ROWNUM < 5) ORDER BY ID; ID
----------
434
2423
5412
9999
注意:此处没有取得 6532的记录,说明是先取记录 后 排序的得到先排序 后 取前4个
SQL> SELECT * FROM (SELECT * FROM AAA_CSDN_1 ORDER BY ID) WHERE ROWNUM < 5; ID
----------
434
2423
5412
6532
但由于我查询的过程中出现了这样一来的现象.
如果先取值后排序,那么对于20条记录,ORDER BY任何字段都会得到同样的记录,哪怕顺序不同.
但我用了ORDER BY 不同的字段,居然得到的是不同的记录,于是才有这种疑惑了.
select * from tbi_sa06
where rownum<10
order by crd_no
和
select * from tbi_sa06
where rownum<10
order by crd_depriv_mgt_no
所查询的记录是不一样的.我的表的记录有40多条.
select * from tbi_sa06
where ...>... and rownum<10
order by crd_depriv_mgt_no
这种情况下可能会不一样的
我的表太大了,有80多个字段.所以不方便写出来.本来这个SQL与项目无关,是我自己发现了这个问题.
难道你们没出现过吗?
1.Select * From (
Select test.*, rank() over(Partition By monthid Order By gz Desc) rk From test)
Where rk = 10
----oracle支持rank函数
2.
select * from test a
where (select count(*) from test b where a.gz < b.gz and a.monthid = b.monthid) < 11
如果该sql不用索引,full table scan会根据数据的物理储存位置(一般先输入的先取出)取出在排序
有索引,index range scan,那么取出来的值本来就有一定逻辑顺序,再排序的效果和上者就不太一样了
WHERE处也没有其它字段.
解决方法我知道!ROW_NUMBER()OVER(),RANK()OVER(),DENSE_RANK()OVER()我都会用.
我只是发现了这么一个怪现象,请大家来参详一下而已!
查询语句就是select * from tablename
这种情况只遇到过一次,以后就没遇到过了。sbaz(万神渡劫),你那个表一直这样吗?
我的那个表,虽然两个SQL检索的记录不同,但我在不同的时间用两个中的某一条语句检索的记录还是一定的.
希望大家多做试验,多交流一下,我暂不结帖.3天后结!
不过你的数据要多点才行!
还有这种事情? GZ
----------------
瞧这帖分数给的...巨受打击 ToT