Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

como selecionar registros pares de uma tabela no oracle?


Não está funcionando porque:para a primeira linha ROWNUM é 1 e, neste caso, MOD(ROWNUM,2) é 1 e desde seu WHERE declaração é MOD(ROWNUM,2)=0 então isso reduz para 1=0 e a linha é descartada. A linha subsequente será testada em relação a um ROWNUM de 1 (já que a linha anterior não está mais na saída e não terá um número de linha), que novamente falhará no teste e será descartada. Repita, ad nauseum e todas as linhas falham no WHERE teste e são descartados.

Se você tentar obter as linhas ímpares dessa maneira usando WHERE MOD(ROWNUM,2)=1 em seguida, ele retornará apenas a primeira linha e a segunda e as linhas subsequentes falharão no teste e nunca serão incluídas na consulta.

Como sugere Vijaykumar Hadalgi, você precisa selecionar o ROWNUM em uma subconsulta (onde pode numerar todas as linhas sem uma cláusula where para restringi-lo) e depois na consulta externa realizar o teste para restringir as linhas:
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