Oracle
 sql >> Baza danych >  >> RDS >> Oracle

jak wybrać nawet rekordy z tabeli w oracle?

To nie działa, ponieważ:dla pierwszego wiersza ROWNUM to 1 i w tym przypadku MOD(ROWNUM,2) to 1 i ponieważ twój WHERE instrukcja to MOD(ROWNUM,2)=0 to zmniejsza się do 1=0 a rząd jest odrzucany. Kolejny wiersz zostanie następnie przetestowany pod kątem ROWNUM z 1 (ponieważ poprzedni wiersz nie jest już wyświetlany i nie będzie miał numeru wiersza), który ponownie nie przejdzie testu i zostanie odrzucony. Powtarzam, do znudzenia i wszystkie wiersze kończą się niepowodzeniem WHERE test i są odrzucane.

Jeśli spróbujesz uzyskać nieparzyste wiersze w ten sposób, używając WHERE MOD(ROWNUM,2)=1 wtedy zwróci tylko pierwszy wiersz, a drugi i kolejne wiersze nie przejdą testu i nigdy nie zostaną uwzględnione w zapytaniu.

Jak sugeruje Vijaykumar Hadalgi, musisz wybrać ROWNUM w podzapytaniu (gdzie może ponumerować wszystkie wiersze bez klauzuli WHERE, aby ją ograniczyć), a następnie w zapytaniu zewnętrznym wykonać test, aby ograniczyć wiersze:

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. Wprowadzenie do pakietów PL/SQL w bazie danych Oracle

  2. Jak utworzyć nie zerowe ograniczenie w Oracle?

  3. Wiele ograniczeń w tabeli:Jak uzyskać wszystkie naruszenia?

  4. Monitorowanie SQL w SQL Developer

  5. Zmień nazwę tabeli lub widoku Oracle