выберите rownum из зарплаты, где rownum = 3; - PullRequest
0 голосов
/ 11 августа 2010

Как извлечь третью строку из любой таблицы, используя ключевое слово "rownum" (я использую oracle-10g)

Ответы [ 4 ]

11 голосов
/ 11 августа 2010

Oracle присваивает значения ROWNUM последовательно, поскольку строки создаются запросом - таким образом, первая выбранная строка получает ROWNUM = 1, вторая выбранная строка получает ROWNUM = 2, третья выбранная строка получает ROWNUM = 3 и т. Д.для назначения строки ROWNUM = 3 две предыдущие строки ДОЛЖНЫ быть выбраны.И именно поэтому ваш запрос не возвращает строк.Вы запрашиваете базу данных для третьей выбранной строки, но строки 1 и 2 никогда не выбирались.

Чтобы продемонстрировать, попробуйте выполнить следующие запросы:

SELECT S.* FROM SALARY S;          -- Should return all rows
SELECT ROWNUM, S.* FROM SALARY S;  -- Should return all rows with ROWNUM prepended
SELECT ROWNUM, S.* FROM SALARY WHERE ROWNUM=3;  -- Should return no rows

Чтобы обойти вашуПроблема, попробуйте следующее:

SELECT ROW_NUMBER FROM
  (SELECT ROWNUM AS ROW_NUMBER, S.* FROM SALARY S)
  WHERE ROW_NUMBER = 3;

Поделитесь и наслаждайтесь.

3 голосов
/ 11 августа 2010

Вам нужно сделать что-то вроде этого

select rnum,sal
  from  
( select sal, rownum rnum

    from salary 
   order by sal desc ) 
 where rnum = 3;

rownum не назначается до окончания фазы предиката, поэтому rownum = 3 всегда будет ложнымИспользуйте CTE или производную таблицу, чтобы получить доступ к rownum извне.

2 голосов
/ 24 октября 2012
SELECT ROW_NUMBER FROM   (SELECT ROWNUM AS ROW_NUMBER, S.* FROM SALARY S)   WHERE ROW_NUMBER = 3; 

Это неверно. Всегда будет возвращаться «3», потому что вы выбираете ROW_NUMBER.

Вместо этого он должен быть "select *", как указано ниже:

select * from (select rownum as row_number, s.* from salary s) where row_number = 3;
0 голосов
/ 11 августа 2010

Является ли rownum фактическим столбцом в вашей таблице зарплат?В противном случае, в зависимости от типа вашей базы данных, rownum, скорее всего, не поддерживается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...