2

我正在尝试运行此查询,但它返回零行。任何线索为什么?

Select distinct a.id
from  table1 a, table b
where  ( a.id= b.id or a.id = b.secondid ) and rownum < 200;

但是,如果我在没有 ROWNUM 子句的情况下运行上述查询,它会找到记录:

Select distinct a.id
from  table1 a, table b
where  ( a.id= b.id or a.id = b.secondid );

我很困惑为什么第一个查询不起作用。

4

3 回答 3

3

您需要在Oracle 确定要返回的行ROWNUM 之后申请。唯一可靠的方法是:

SELECT * FROM (
  Select distinct a.id
  from  table1 a, table b
  where  ( a.id= b.id or a.id = b.secondid )
) WHERE ROWNUM < 200;
于 2013-03-23T18:18:08.163 回答
0

请使用下面的线程。很好的解释。 https://community.oracle.com/thread/210143 这里有两个可行的解决方案。

  1. 对 8i 和 9i 使用 row_number 函数:
    ROW_NUMBER() OVER (ORDER BY ASC) AS ROW_NUMBER。
  2. 重用 Rownum 伪列(这似乎更好) SELECT * FROM ( SELECT t.*, ROWNUM AS rn FROM ( SELECT * FROM mytable ORDER BY paginator, id ) t ) WHERE rn BETWEEN 1 AND 3
于 2018-12-07T15:22:49.213 回答
-1

将“and rownum < 200”更改为“WHERE rownum < 200”

于 2013-03-23T18:04:19.293 回答