Oracle
 sql >> база данни >  >> RDS >> Oracle

как да изберете дори записи от таблица в oracle?

Не работи, защото:за първия ред ROWNUM е 1 и в този случай MOD(ROWNUM,2) е 1 и тъй като вашият WHERE изразът е MOD(ROWNUM,2)=0 след това това намалява до 1=0 и редът се отхвърля. След това следващият ред ще бъде тестван срещу ROWNUM от 1 (тъй като предишният ред вече не е в изхода и няма да има номер на ред), което отново ще се провали на теста и ще бъде отхвърлено. Повторете, гадене на рекламата и всички редове не отговарят на WHERE тестват и се изхвърлят.

Ако се опитате да получите нечетните редове по този начин, като използвате WHERE MOD(ROWNUM,2)=1 след това ще върне само първия ред, а вторият и следващите редове ще се провалят при теста и никога няма да бъдат включени в заявката.

Както Виджайкумар Хадалги предлага, трябва да изберете ROWNUM в подзаявка (където може да номерира всички редове без клауза where, за да го ограничи) и след това във външната заявка да извършите теста, за да ограничите редовете:

SELECT ename, job
FROM   (
  SELECT ename,
         job,
         ROWNUM AS row_id             -- Generate ROWNUM second.
  FROM   (
    SELECT ename, job
    FROM   Emp
    ORDER BY ename                    -- ORDER BY first.
  )
)
WHERE  MOD( row_id, 2 ) = 0;          -- Filter third.

SQLFIDDLE



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Актуализиране на заявката if за Oracle

  2. Oracle PLSQL блокова структура и типове

  3. R12.2 Онлайн доклад за готовност за корекция

  4. Предпазни мрежи

  5. Грешка при конвертиране на XML от колона CLOB в колона XMLType