質問

SELECT instmax
FROM
  (SELECT instmax ,rownum r
  FROM
    ( SELECT instmax FROM pswlinstmax ORDER BY instmax DESC NULLS LAST
    )
  WHERE r = 2
  );

実行後、このエラーが発生しています。

ORA-00904: "R": invalid identifier
00904. 00000 -  "%s: invalid identifier"
*Cause:    
*Action:
Error at Line: 39 Column: 8

なぜこのエラーが発生しているのですか?

役に立ちましたか?

解決

エイリアスは、同じクエリの句ではサポートされていないためです。代わりに、次のようにクエリを書きます

SELECT instmax
FROM 
  (SELECT instmax ,rownum r 
  FROM 
    ( SELECT instmax FROM pswlinstmax ORDER BY instmax DESC NULLS LAST 
    )  
) WHERE r = 2;

他のヒント

まず第一に、あなたは rownum = 2 調子。を指定して、最初の2行を選択できます where rownum < 3 状態、またはあなたはそれを別のクエリに包み、あなたを参照することができます rownum あそこからの普通のコラムとして。

その後、列エイリアスを参照することはできません where サブクエリの条項このエイリアスに割り当てられました。 1つのレベルを上げることができます:

SELECT instmax
  FROM (SELECT instmax, rownum r
          FROM (SELECT instmax
                  FROM pswlinstmax
                 ORDER BY instmax DESC NULLS LAST)
         )
         WHERE r = 2;

または、この参照を避けてください

-- this will return first two rows
SELECT instmax
  FROM (SELECT instmax, rownum r
          FROM (SELECT instmax
                  FROM pswlinstmax
                 ORDER BY instmax DESC NULLS LAST)

         WHERE rownum < 3
         );

そのような句の列エイリアスを参照することはできません。

Rownumもそのように仕事をやめません。このようなことを試してみてください:

select instmax from
(
  SELECT instmax, row_number(instmax) order by (instmax desc nulls last) rownumber
  FROM pswlinstmax
)
where rownumber = 2;

@amitは正しいです。 Oracleは最初にWHERE条件を評価するため、次に選択します。サブセレクトを行う必要があります。

それ以外の:

SELECT instmax
FROM(
  SELECT instmax ,rownum r
  FROM (SELECT instmax FROM pswlinstmax ORDER BY instmax DESC NULLS LAST)
  WHERE r = 2
  );

以下をせよ:

SELECT instmax
FROM ( SELECT instmax ,rownum r
       FROM ( SELECT instmax FROM pswlinstmax ORDER BY instmax DESC NULLS LAST )
)
WHERE r = 2
;

... rはここで句に見えるようになりました。この質問は、この質問です。

Where句のエイリアスを使用します

取得する一般的な方法では、上位5人の高給の従業員が言えます。

SELECT ename,sal FROM   emp
WHERE  rownum <= 5
ORDER BY sal DESC;
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top