Говнокод →  Ищем ошибки в sql запросе

К сожалению и к моему большому удивлению в Оракле нет такого полезного оператора LIMIT, который есть в MySQL. Аналогом ему в оракле служит псевдо-колонка rownum, которая отображает номер выбираемой записи по ходу выборки.

Итак, есть такой вот простенький sql запрос для Oracle

SELECT * FROM T WHERE ROWNUM BETWEEN 2 AND 20


который по мнению автора выберет 19 строк, начиная с 2 и заканчивая 20-й.
Вопрос знатокам: Будет ли такой вопрос выводить требуемые записи? Вроде как будет… Но раз этот пост в разделе говнокод, то надо подумать ещё.

Думаем. Когда у нас выберется первая запись по нашему запросу? Когда rownum будет 2. А когда rownum будет 2? После того как выберется первая запись. Из всего этого делаем однозначный вывод — не выберется ни одной записи.
1


Вставка изображения
Файл:
Ссылка:
Выравнивание:
Описание:
комментарии(4): 
igorok 28 января 2009, 14:53 #
1 
ггг, а как выбрать со 2 по 20 записи?
это ж Оракл:)) 100% что-то должно быть
qubit 28 января 2009, 14:56 #
1 
Проще простого
SELECT O.*
  FROM (SELECT ROWNUM RWID, O.*
                  FROM (SELECT * FROM TABLENAME) O
                 WHERE ROWNUM <= 2) O
 WHERE O.RWID >= 20

2 вложеных запроса и дело в шляпе=)
igorok 28 января 2009, 14:58 #
0 
ну шо я могу сказать
Оракл рулит, наверно, не в лимитах:)
Да и вообще зачем Ораклу limit ?:)
katana 10 июня 2011, 00:33 #
0 
совершенно не просто. делать 3 запроса к базе, вместо одного, как то нет так.
Наверняка есть и другой способ. кстати способ описанный в самом посте выглядит рабочим, но с ораклом я не работал, так, что ниче сказать не могу.

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии. Авторизуйтесь, пожалуйста, или зарегистрируйтесь, если не зарегистрированы.