Oracle pobieranie kilku pierwszych wierszy

0

Witam,

Jak w temacie. Wyczytałem że do tego służy rownum. Ok wszystko pięknie, więc moze ktoś mi wyjaśnić to?

select  DISTINCT NAZWA from KONTRAHENT WHERE lower(NAZWA) LIKE lower('a%') AND ROWNUM <= 2   ORDER BY NAZWA 

Zwraca przykładowo:

Akademia Medyczna
ATBS "KODREM" Sp. Z.o.o.

Jednakże, dwa pierwsze wiersze z zapytania takiego:

select  DISTINCT NAZWA from KONTRAHENT WHERE lower(NAZWA) LIKE lower('a%') ORDER BY NAZWA 

To:

a
A 2 Sp.zo.o

Widać więc wyrażnie, że rownume wcale NIE ZWRACA PIERWSZYCH wierszy z zapytania. Pytanie więc: co mam zrobić, aby zapytanie zwróciło rzeczywiście PIERWSZE wiersze z wyniku?

0

Rownum to nie limit. W Oracle nie ma zaimplementowanej instrukcji limit (dla MS to jest zdaje się top). Jeśli chcesz pobrać po posortowaniu pierwszych kilka rekordów to musisz zrobić mniej wiecej tak:

select *
from (select * from tablica where ... order by ...)
where rownum < 5
0

najpierw jest "przydzielany" rownum a dopiero potem sortowane

0

Ok.. rozumiem już chyba. Zadziałało to:

select * from
(
select DISTINCT NAZWA FROM KONTRAHENT  WHERE LOWER(NAZWA) LIKE LOWER('a%') order by NAZWA 
) 
where ROWNUM <= 2;

Aż dziw że nie ma prostszego sposobu...

1 użytkowników online, w tym zalogowanych: 0, gości: 1