sql >> Base de Datos >  >> RDS >> Oracle

¿Cómo seleccionar registros pares de una tabla en Oracle?

No funciona porque:para la primera fila ROWNUM es 1 y, en este caso, MOD(ROWNUM,2) es 1 y desde tu WHERE declaración es MOD(ROWNUM,2)=0 entonces esto se reduce a 1=0 y la fila se descarta. La fila subsiguiente luego se probará contra un ROWNUM de 1 (dado que la fila anterior ya no está en la salida y no tendrá un número de fila), que nuevamente fallará la prueba y será descartada. Repita, ad nauseum y todas las filas fallan en WHERE se prueban y se descartan.

Si intenta obtener las filas impares de esta manera usando WHERE MOD(ROWNUM,2)=1 luego devolverá solo la primera fila y la segunda fila y las siguientes no pasarán la prueba y nunca se incluirán en la consulta.

Como sugiere Vijaykumar Hadalgi, debe seleccionar ROWNUM en una subconsulta (donde puede numerar todas las filas sin una cláusula where para restringirlo) y luego en la consulta externa realizar la prueba para restringir las filas:

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.

SQLFIDLE