sql >> Databáze >  >> RDS >> Oracle

jak vybrat sudé záznamy z tabulky v oracle?

Nefunguje, protože:pro první řádek ROWNUM je 1 a v tomto případě MOD(ROWNUM,2) je 1 a od vašeho WHERE příkaz je MOD(ROWNUM,2)=0 pak se to sníží na 1=0 a řádek je zahozen. Následující řádek pak bude testován proti ROWNUM z 1 (protože předchozí řádek již není na výstupu a nebude mít číslo řádku), což v testu opět neprojde a bude zahozeno. Opakuji, nevolnost a všechny řádky nesplňují WHERE test a jsou vyřazeny.

Pokud se pokusíte získat liché řádky tímto způsobem pomocí WHERE MOD(ROWNUM,2)=1 pak vrátí pouze první řádek a druhý a další řádky v testu neprojdou a nikdy nebudou zahrnuty do dotazu.

Jak navrhuje Vijaykumar Hadalgi, musíte vybrat ROWNUM v dílčím dotazu (kde může očíslovat všechny řádky bez klauzule where, která jej omezí) a poté ve vnějším dotazu provést test pro omezení řádků:

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. Ukládání souborů do SQL databáze pomocí FILESTREAM – část 1

  2. JSON_OBJECT() – Vytvoření objektu JSON ze seznamu párů klíč/hodnota v MySQL

  3. 4 Funkce pro vrácení měsíce z data v MariaDB

  4. Veselé tweety o životě DBA