Oracle
 sql >> Database >  >> RDS >> Oracle

come selezionare anche i record da una tabella in Oracle?

Non funziona perché:per la prima riga ROWNUM è 1 e, in questo caso, MOD(ROWNUM,2) è 1 e poiché il tuo WHERE l'istruzione è MOD(ROWNUM,2)=0 quindi questo si riduce a 1=0 e la riga viene scartata. La riga successiva verrà quindi testata rispetto a un ROWNUM di 1 (poiché la riga precedente non è più nell'output e non avrà un numero di riga), che fallirà nuovamente il test e verrà scartato. Ripeti, fino alla nausea e tutte le righe non superano il WHERE testare e vengono scartati.

Se provi a ottenere le righe dispari in questo modo utilizzando WHERE MOD(ROWNUM,2)=1 quindi restituirà solo la prima riga e la seconda e le righe successive non supereranno il test e non verranno mai incluse nella query.

Come suggerisce Vijaykumar Hadalgi, è necessario selezionare ROWNUM in una sottoquery (dove può numerare tutte le righe senza una clausola where per limitarla) e quindi nella query esterna eseguire il test per limitare le righe:

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