[ _owl_ @ 15.07.2004. 23:54 ] @
Ako nekome ikad zatreba da simulira LIMIT klauzuli iz MySQL-a postoji resenje po ceni brzine izvrsavanja upita. Ceo rezultat SELECT naredbe treba grupisati po pseudokoloni ROWNUM a onda dodati HAVING klauzulu tipa
Code:

HAVING ROWNUM BETWEEN :start AND :end

Posto se GROUP BY (a samim tim i HAVING) procesira posle selektovanja redova moguce je koristiti izraze u kojima se trazi da je vrednost kolone ROWNUM veca od 1 (sto nije slucaj kada se isti takav izraz koristi u WHERE klauzuli)

[ Dejan Topalovic @ 16.07.2004. 18:20 ] @
LIMIT se moze takodje simulirati i po principu Top-N-Analyse:

Pokazacu na primjeru, koji se radi na kursu, koristeci tabelu employees, tako da selektujem 3 osobe koje najvise zaradjuju:
Code:

SELECT ROWNUM AS "Rank", first_name||' '||last_name AS "Ime i prezime", salary AS "Plata"
FROM (SELECT first_name, last_name, salary FROM employees ORDER BY salary DESC)
WHERE ROWNUM <= 3;

Ovaj sub-select (SELECT first_name, last_name, salary FROM employees ORDER BY salary DESC) oznacava "Inline-View", kojim selektujemo zeljene podatke i sortiramo po koloni salary. Iz tog rezultata, odabiremo samo 3 osobe koje najvise zaradjuju, koristeci WHERE klauzulu i ROWNUM internu pseudo-kolumnu koja svakom recordu iz sub-selecta dodjeljuje jednu sekvencijalnu vrijednost pocevsi od 1.
[ _owl_ @ 16.07.2004. 20:05 ] @
Da, da ovakvo resenje sam procitao negde u dokumentaciji ali sam bio zaboravio na njega. Inace ono sto sam ja predlozio radi samo za upite u kojima se ne koristi GROUP BY.
[ CandyMan @ 20.07.2004. 07:13 ] @
Pogledajte temu

http://www.elitesecurity.org/tema/53420

Predlažem ovo samo kao ideju, jer rownum nije cross-platform. Performanse su katastrofa, naravno...