sql >> Databasteknik >  >> RDS >> Oracle

hur väljer man jämna poster från en tabell i Oracle?

Det fungerar inte eftersom:för den första raden ROWNUM är 1 och, i det här fallet, MOD(ROWNUM,2) är 1 och sedan din WHERE satsen är MOD(ROWNUM,2)=0 sedan reduceras detta till 1=0 och raden kasseras. Den efterföljande raden kommer sedan att testas mot en ROWNUM av 1 (eftersom den föregående raden inte längre finns i utgången och inte kommer att ha något radnummer), vilket igen kommer att misslyckas i testet och kasseras. Upprepa, ad nauseum och alla rader misslyckas med WHERE testa och kasseras.

Om du försöker få de udda raderna på detta sätt med WHERE MOD(ROWNUM,2)=1 då returnerar den endast den första raden och den andra, och efterföljande, rader kommer att misslyckas i testet och kommer aldrig att inkluderas i frågan.

Som Vijaykumar Hadalgi föreslår, måste du välja ROWNUM i en underfråga (där den kan numrera alla rader utan en where-sats för att begränsa den) och sedan i den yttre frågan utföra testet för att begränsa raderna:

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. Dynamisk SQL (passerar tabellnamnet som parameter)

  2. Hur fixar man FEL:kolumnen c.relhasoids finns inte i Postgres?

  3. Använd XEvent Profiler för att fånga frågor i SQL Server

  4. Hur infogar man en datatabell i SQL Server-databastabellen?