2017-01-26 2 views
0
SELECT * FROM(
SELECT * FROM(
SELECT PART_NO, SRC_PART_NO, CTNM_ENG, DESCRIPTION, USER_ID, REG_DT, CHG_DT, FLAG,  
(select count(*) from (SELECT PART_NO, SRC_PART_NO, CTNM_ENG, DESCRIPTION, USER_ID, REG_DT, CHG_DT, FLAG 
FROM GM_PART_LIST 
WHERE PART_NO LIKE '%' || '%' AND SRC_PART_NO LIKE '%' || '%' AND CTNM_ENG LIKE 'BOLT'|| '%' 
AND 1 = 1)) as total_count -- Nested subquery that return total count of record set. plug in same where conditions. 
FROM GM_PART_LIST 
WHERE PART_NO LIKE '%' || '%' AND SRC_PART_NO LIKE '%' || '%' AND CTNM_ENG LIKE 'BOLT'|| '%' 
AND 1 = 1 
ORDER BY PART_NO ASC)) 
WHERE ROWNUM BETWEEN 2 AND 202; 

Как получается, что с указанным запросом, если при поиске в диапазоне от 1 до 200 Тянет записи нормально, но когда я включаю его на 2 или другое целое число, превышающее 1, он не запрашивать никаких записей ? - это проблема синтаксиса? заблаговременно за любую помощь, которую может предложить любой.Как использовать ROWNUM с вложенными запросами

ответ

1

ROWNUM присваивается, когда строка оценивается для условий where. Выбирается первая строка из источника строки и задается ROWNUM=1. Если один из условий were равен ROWNUM > 1, эта строка не будет выбрана.

Затем ROWNUM=1 является переназначен к следующей строке (что опять-таки потерпит неудачу в пункте where) и так далее. Это связано с тем, что в конце ROWNUM должно выполняться последовательно с 1, это не будет последовательность с зазорами. Поэтому любое условие, которое не позволяет ROWNUM быть 1 (пример: where mod(ROWNUM, 2) = 0), будет производить нулевые строки и по той же причине.

+0

Большое вам спасибо :) – Jules

Смежные вопросы