sql >> Database >  >> RDS >> Oracle

hoe selecteer je zelfs records uit een tabel in orakel?

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



  1. AT TIME ZONE gebruiken om een ​​oud rapport te herstellen

  2. PostgreSQL-fout bij het maken van een extensie

  3. Haal records op met de hoogste/kleinste <whatever> per groep

  4. Hoe installeer ik de Python MySQLdb-module met pip?