Het werkt niet omdat:voor de eerste rij ROWNUM
is 1
en, in dit geval, MOD(ROWNUM,2)
is 1
en sinds je WHERE
instructie is MOD(ROWNUM,2)=0
dan reduceert dit tot 1=0
en de rij wordt weggegooid. De volgende rij wordt dan getest met een ROWNUM
van 1 (aangezien de vorige rij niet langer in de uitvoer staat en geen rijnummer zal hebben), zal de test opnieuw niet slagen en worden weggegooid. Herhaal, advertentie misselijkheid en alle rijen mislukken de WHERE
test en worden weggegooid.
Als je op deze manier de oneven rijen probeert te krijgen met WHERE MOD(ROWNUM,2)=1
dan retourneert het alleen de eerste rij en de tweede en volgende rijen zullen de test niet doorstaan en zullen nooit worden opgenomen in de zoekopdracht.
Zoals Vijaykumar Hadalgi suggereert, moet je de ROWNUM selecteren in een subquery (waar het alle rijen kan nummeren zonder een waar-clausule om het te beperken) en vervolgens in de buitenste query de test uitvoeren om de rijen te beperken:
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