select top 5 * from posterimage where imagenum not in (select top 10 imagenum from posterimage)
这条语句在oracle数据库里应该怎么写?
oracle数据库里没有top
查询前5可以是select * from(select * from posterimage order by imagenum) where rownum <= 5
只能完成前半段select top 5 * from posterimage要表达的意思
那剩下的where以后的该怎么办呢?
有什么好的方法可以查询到我要的数据么?
这条语句在oracle数据库里应该怎么写?
oracle数据库里没有top
查询前5可以是select * from(select * from posterimage order by imagenum) where rownum <= 5
只能完成前半段select top 5 * from posterimage要表达的意思
那剩下的where以后的该怎么办呢?
有什么好的方法可以查询到我要的数据么?
select *
from (select t.*, rn from posterimage t where rownum <= 15)
where rn >= 10
---------修改下
select *
from (select t.*, rownum rn from posterimage t where rownum <= 15)
where rn >10
with t as (
select p.*, row_number() over (order by imagenum) rn from posterimage p
)
select * from t where rn between 11 and 15;
比如ROWNUM<10 他包括1是OK的
或者ROWNUM=1
或者ROWNUM<2
...
FROM (SELECT ROWNUM NUM
,P.*
FROM POSTERIMAGE P)
WHERE NUM BETWEEN 11 AND 15
根据你sql查询出来的结果 第一笔数据的序号就是1
依次往下
rownum只能小于 一个数字。。
不能大于一个数字。。
select *from table rownum between 11 and 15
这个 sql查询出来的结果 是 从11到 15 的数据。。
这个时候 序列1的数据是不显示出来的
但是这个结果集一旦出来呢 第11笔数据又变成了 第1笔 。。
序号11的数据成了 序号1的数据。。但是呢。。
原本 又有个 序号为1的数据。。此时会出现两个序号1数据 冲突 。。rownum是唯一的 。。不能重复的
所以 在 查询出来的结果集 外面 嵌套一层
select t.* from (select *,rownum as num from table ) t where t.num between 11 and 15
是可以的因为此时 子句查询出来的结果 按照 当前的顺序 以及包含序号的结果 成为了一个结果集
那么这里的 rownum 成为了 别名为t 这个表(结果集)的一个字段。。
故而不存在冲突了
不知道 LZ是否明白了
select *from table rownum between 11 and 15
你可以把数据库看作是这么工作的
要得以上结果呢
先要执行select *from table
然后把结果集从上到下给伪列
然后呢 找到第十一行
然后呢找到第十五行
把这中间的几行显示
这时候呢新的结果集来了。。
但是伪列为1的数据还在table中。
但是按照此时的显示
第十一行数据 的伪列成为了第一行
一个table中两个伪列为1的数据。。
故而冲突