Oracle
 sql >> Base de données >  >> RDS >> Oracle

comment sélectionner même les enregistrements d'une table dans oracle?

Cela ne fonctionne pas car :pour la première ligne ROWNUM est 1 et, dans ce cas, MOD(ROWNUM,2) est 1 et depuis votre WHERE l'instruction est MOD(ROWNUM,2)=0 alors cela se réduit à 1=0 et la ligne est ignorée. La ligne suivante sera ensuite testée par rapport à un ROWNUM de 1 (puisque la ligne précédente n'est plus dans la sortie et n'aura pas de numéro de ligne), qui échouera à nouveau au test et sera rejetée. Répétez, ad nauseum et toutes les lignes échouent le WHERE test et sont rejetés.

Si vous essayez d'obtenir les lignes impaires de cette façon en utilisant WHERE MOD(ROWNUM,2)=1 alors il renverra uniquement la première ligne et la deuxième ligne et les suivantes échoueront au test et ne seront jamais incluses dans la requête.

Comme le suggère Vijaykumar Hadalgi, vous devez sélectionner le ROWNUM dans une sous-requête (où il peut numéroter toutes les lignes sans clause where pour le restreindre) puis dans la requête externe effectuer le test pour restreindre les lignes :

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