Neeraj
Neeraj

Reputation: 1173

rownum issue in oracle query

I m trying to run this query but it returns zero rows. Any clues why?

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

But if I run the above query without the ROWNUM clause it finds records:

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

I'm confused why the first query is not working.

Upvotes: 2

Views: 15289

Answers (3)

Breton F.
Breton F.

Reputation: 312

Please use the thread below. Pretty good explanations. https://community.oracle.com/thread/210143 Here are two working solutions.

  1. Use the row_number function for 8i and 9i :
    ROW_NUMBER() OVER (ORDER BY ASC) AS ROW_NUMBER.
  2. Reuse Rownum pseudo column (This seems to be better) SELECT * FROM ( SELECT t.*, ROWNUM AS rn FROM ( SELECT * FROM mytable ORDER BY paginator, id ) t ) WHERE rn BETWEEN 1 AND 3

Upvotes: 1

Ed Gibbs
Ed Gibbs

Reputation: 26333

You need to apply ROWNUM after Oracle figures out which rows to return. The only reliable way is this:

SELECT * FROM (
  Select distinct a.id
  from  table1 a, table b
  where  ( a.id= b.id or a.id = b.secondid )
) WHERE ROWNUM < 200;

Upvotes: 4

Vaibhav Desai
Vaibhav Desai

Reputation: 2728

Change "and rownum < 200" to "WHERE rownum < 200"

Upvotes: -1

Related Questions