Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 使用带有“rownum”的函数&燃气轮机&引用;登录oracle_Sql_Oracle_Pagination_Oracle10g - Fatal编程技术网

Sql 使用带有“rownum”的函数&燃气轮机&引用;登录oracle

Sql 使用带有“rownum”的函数&燃气轮机&引用;登录oracle,sql,oracle,pagination,oracle10g,Sql,Oracle,Pagination,Oracle10g,我想通过rownum函数I_e(rownum>3)选择大于3的行数 例如,如果有25行,我想通过rownum函数检索最后22行。 但是当我写下 select * from test_table where rownum>3; 它检索不到行。 有人能帮我解决这个问题吗。 提前感谢在RDBMS中,没有第一行或最后一行。你所谓的“raws”,实际上是set(集合),它们可以被排序也可以不排序rownum是一个函数,它只是枚举结果集,只有在计算了结果集之后才有意义,要对数据集(行)进行排序,您应

我想通过rownum函数I_e(rownum>3)选择大于3的行数 例如,如果有25行,我想通过rownum函数检索最后22行。 但是当我写下

select * from test_table where rownum>3;
它检索不到行。 有人能帮我解决这个问题吗。
提前感谢

在RDBMS中,没有第一行或最后一行。你所谓的“raws”,实际上是set(集合),它们可以被排序也可以不排序
rownum
是一个函数,它只是枚举结果集,只有在计算了结果集之后才有意义,要对数据集(行)进行排序,您应该在查询中执行此操作。在调用
rownum
之前,您必须在特定的select语句中告诉DB顺序的含义

select * from (select rownum as rn, t.* from test_table t) where rn > 3
有关更多示例,请参阅本文

它不起作用,因为:对于第一行,假设
ROWNUM
为1,并且由于
WHERE
子句为
ROWNUM>3
,那么这将减少到
1>3,并且该行被丢弃。随后,将根据
ROWNUM
值1测试下一行(因为上一行不再在输出中,现在不需要行号),这将再次导致测试失败并被丢弃。重复,ad nauseum和所有行均未通过
WHERE
子句筛选,并被丢弃

如果要为行分配一个
ROWNUM
,则需要执行以下操作:子查询:

SELECT *                  -- Finally, in the outer query, filter on the assigned ROWNUM
FROM   (
  SELECT t.*,             -- First, in the inner sub-query, apply a ROWNUM
         ROWNUM AS rn
  FROM   test_table t
)
WHERE  rn > 3;
或者,如果要在编号前对结果排序:

SELECT *                  -- Finally, in the outer query, filter on the assigned ROWNUM
FROM   (
  SELECT t.*,             -- Second, in the next level sub-query, apply a ROWNUM
         ROWNUM AS rn
  FROM   (
    SELECT *              -- First, in the inner-most sub-query, apply an order
    FROM   test_table
    ORDER BY some_column
  ) t
)
WHERE  rn > 3;

作为
select*从您尝试搜索的行所在的test_表中进行尝试?例如,有许多类似的问题。此外,您需要定义如何确定一行是否“大于”另一行“大于正整数的ROWNUM值的测试条件始终为false”这不是ROWNUM的工作方式。您可以使用行数分析函数来实现这一点,但您仍然需要确定列的排序依据。实现结果的一种方法是-
select*from test_table减去select*from test_table,其中rownum@Tom穆蒂伦蒂,这个结果意味着什么?给“几行”,哦,不,“几行”太多了,少给我3行。RDBMS中的“Relational”一词一定意味着什么,不是吗?
ROWNUM
不是一个函数,而是一个函数。此外,您不需要指定顺序-如果不指定顺序,Oracle将按照检索到的行的相同顺序对行进行编号(这可能导致不确定的顺序)。“@MT0不同意,是的,根据Oracle文档,rownum是pseudocolumn,但将其视为函数不是错误的。”Pseudocolumns“行为类似于表列,这就是为什么它们称为“伪列”,但实际上它们是作为系统函数实现的。谢谢您的回答。。。。