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以后的该怎么办呢?
有什么好的方法可以查询到我要的数据么?

解决方案 »

  1.   


     select *
       from (select t.*, rn from posterimage t where rownum <= 15)
      where rn >= 10
      

  2.   


    ---------修改下
     select *
       from (select t.*, rownum rn from posterimage t where rownum <= 15)
      where rn >10
      

  3.   


    with t as (
    select p.*, row_number() over (order by imagenum) rn from posterimage p
    )
    select * from t where rn between 11 and 15;
      

  4.   

     select rownum num ,p.* from posterimage p where num between 10 and 15 
      

  5.   

    应该是11 到15;select rownum num ,p.* from posterimage p where num between 11 and 15 
      

  6.   

    是的,报错的,我想知道为什么,请谅解,以前没有接触过oracle数据库
      

  7.   

    ROWNUM只支持从1开始,
    比如ROWNUM<10  他包括1是OK的
    或者ROWNUM=1
    或者ROWNUM<2
    ...
      

  8.   

    因为有ROWNUM这个伪列,所以...
      

  9.   

    因为NUM是这个SQL里的ROWNUM的别名啊,别名只能由外一层来调用...SELECT *
      FROM (SELECT ROWNUM NUM
                  ,P.*
              FROM POSTERIMAGE P)
     WHERE NUM BETWEEN 11 AND 15
      

  10.   

    rownum是一个序号
    根据你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是否明白了
      

  11.   

    我说得不够专业 再详细补充点
    select *from table rownum between 11 and 15
    你可以把数据库看作是这么工作的
    要得以上结果呢
    先要执行select *from table
    然后把结果集从上到下给伪列
    然后呢 找到第十一行
    然后呢找到第十五行 
    把这中间的几行显示
    这时候呢新的结果集来了。。
    但是伪列为1的数据还在table中。
    但是按照此时的显示
    第十一行数据 的伪列成为了第一行
    一个table中两个伪列为1的数据。。
    故而冲突