sql >> データベース >  >> RDS >> Oracle

rownum=3の給与からrownumを選択します。

    Oracleは、クエリによって行が生成されるときにROWNUMに値を順番に割り当てます。したがって、フェッチされた最初の行はROWNUM =1を取得し、フェッチされた2番目の行はROWNUM =2を取得し、フェッチされた3番目の行はROWNUM=3を取得します。 ROWNUM =3を割り当てるには、先行する2つの行をフェッチする必要があります。そして、これがクエリが行を返さない理由です。データベースにフェッチされた3番目の行を要求していますが、行1と2はフェッチされていません。

    実例を示すために、次のクエリを実行してみてください。

    SELECT S.* FROM SALARY S;          -- Should return all rows
    SELECT ROWNUM, S.* FROM SALARY S;  -- Should return all rows with ROWNUM prepended
    SELECT ROWNUM, S.* FROM SALARY WHERE ROWNUM=3;  -- Should return no rows
    

    問題を回避するには、次のことを試してください。

    SELECT ROW_NUMBER FROM
      (SELECT ROWNUM AS ROW_NUMBER, S.* FROM SALARY S)
      WHERE ROW_NUMBER = 3;
    

    共有してお楽しみください。



    1. SQLServerでのテーブル変数のパフォーマンス

    2. WHERE条件の別のテーブルをJOINで使用したSQLDELETE

    3. 設定ファイルにプレーンテキストでmysqlパスワードを保存するよりも良いアプローチですか?

    4. テーブル内の各IDの最大連続年数を検索します(Oracle SQL)