Достаточно часто вижу запросы вроде
SQL код:
select * from table where username='VASIA' and rownum<3
программисты почему-то полагают, что в этом случае они отберут две строки с Васей. Попробую объяснить на пальцах, почему это не совсем так.
Представим себе таблицу со столбцом username
VASIA
PETYA
MISHA
VASIA
вот те, кто думает, что отберется первая и последняя колонка, глубоко заблуждаются - запускаем запрос, сначала псевдоколонка rownum появится
1 VASIA
2 PETYA
3 MISHA
4 VASIA
и теперь отбираем по условию, а условие у нас rownum<3, отберется только
1 VASIA
Причем, порядок выборки из таблицы может быть совершенно неожиданный. Как и
SQL код:
select * from table where username='VASIA' and rownum=4
тоже не имеет смысл.
В общем случае, чтобы меньше путаться, ограничение по количеству строк лучше выносить через подзапрос, т.е. в нашем случае лучше переделать так
SQL код:
select * from (select * from table where username='VASIA') where rownum<3
и просто запомните, что rownum в соединениях условий использовать нельзя. Такие глюки вылезают, что диву даешься.