2013-03-23 6 views
1

Я пытаюсь запустить этот запрос, но он возвращает нулевые строки. Какие-нибудь подсказки почему?rownum issue in oracle query

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); 

Я запутался, почему первый запрос не работает.

+3

. , говоря «это не работает», не помогает. Вы должны сказать, в чем проблема. –

+0

не работает, значит, не получается правильный выход. Он возвратил Zero строки, если я добавлю rownum в конце. – Neeraj

+0

Видите, это было не так сложно, не так ли. В следующий раз, когда вы зададите вопрос, не забудьте указать * конкретные детали * вместо того, чтобы говорить «это не работает» или что-то подобное бесполезно. – APC

ответ

2

Вы должны применить ROWNUMпосле Oracle выясняет, какие строки вернуться. Единственным надежным способом является следующее:

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

да, спасибо, я понял это, но я думал, что он должен был работать и раньше. например, если вы удаляете предложение или тогда оно работает. Выберите различный a.id из таблицы 1 a, таблицу b где a.id = b.id и rownum <200; – Neeraj

+0

@Neeraj - есть случаи, когда 'ROWNUM' будет работать, не прибегая к внешнему запросу, но они редки. На сайте Oracle «Ask Tom» есть довольно хорошее объяснение [здесь] (http://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:948366252775). –

-1

Изменить "и ROWNUM < 200" до "ГДЕ ROWNUM < 200"

+1

Это положило бы два предложения 'where' для одного' select' ... – Mat

+0

К сожалению, не прочитал его полный запрос. Виноват. –