Oracle pobieranie kilku pierwszych wierszy

Odpowiedz Nowy wątek
2011-10-17 15:01
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?

Pozostało 580 znaków

2011-10-17 15:20
MłodyDuchem

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

Pozostało 580 znaków

2011-10-17 15:24
0

najpierw jest "przydzielany" rownum a dopiero potem sortowane


- Ciemna druga strona jest.
- Nie marudź Yoda, tylko jedz tego tosta.
Google NIE GRYZIE!
Pomogłem - kliknij

Pozostało 580 znaków

2011-10-17 15:26
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...

ojtamojtam :) - Misiekd 2011-10-17 15:30

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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