sql >> Database teknologi >  >> RDS >> Oracle

hvordan vælger man lige poster fra en tabel i oracle?

Det virker ikke fordi:for den første række ROWNUM er 1 og i dette tilfælde MOD(ROWNUM,2) er 1 og siden din WHERE sætningen er MOD(ROWNUM,2)=0 så reduceres dette til 1=0 og rækken kasseres. Den efterfølgende række vil derefter blive testet mod en ROWNUM af 1 (da den forrige række ikke længere er i outputtet og ikke vil have et rækkenummer), hvilket igen vil fejle testen og blive kasseret. Gentag, ad nauseum og alle rækker mislykkes WHERE test og kasseres.

Hvis du prøver at få de ulige rækker på denne måde ved hjælp af WHERE MOD(ROWNUM,2)=1 derefter returnerer den kun den første række, og den anden, og efterfølgende, rækker vil mislykkes i testen og vil aldrig blive inkluderet i forespørgslen.

Som Vijaykumar Hadalgi foreslår, skal du vælge ROWNUM i en underforespørgsel (hvor den kan nummerere alle rækkerne uden en where-sætning for at begrænse det) og derefter i den ydre forespørgsel udføre testen for at begrænse rækkerne:

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. MigrationSchemaMissing(Kan ikke oprette tabellen django_migrations (%s) % exc)

  2. 8 måder at tilføje mikrosekunder til en Datetime-værdi i MariaDB

  3. Sådan fjerner du en adgangskode fra en database i Access 2016

  4. 3 måder at få sammenstillingen af ​​en kolonne i MariaDB