2

チャップスとチャペット

簡単な質問です。ストアド プロシージャから 1 行だけを返す必要がありますが、WHERE 句をどこに配置してもエラーが発生します。誰かが(長すぎるために切り詰められた)コードを見て、どこに行くべきか教えてもらえますか?

SELECT        **values** 

INTO          **variables**                  

FROM          **table**

_WHERE        ROWNUM = 1_

INNER JOIN    **other table**
ON            **join target**
ORDER BY      **sort criteria**;

_WHERE        ROWNUM = 1_

ありがとう

4

4 に答える 4

7

これがrownumクエリを構築する方法だと思います

SELECT * FROM 
INTO **Variables * *
( SELECT * FROM X 
  WHERE Y 
  ORDER BY Z
) 
WHERE ROWNUM = 1;  
于 2012-09-03T10:10:03.487 に答える
4

あなたはほとんど正しかった。JOIN の後、ORDER BY の前に WHERE 句を配置します。

SELECT        **values** 

INTO          **variables**                  

FROM          **table**

INNER JOIN    **other table**
ON            **join target**

_WHERE        ROWNUM = 1_

ORDER BY      **sort criteria**;

ただし、これはあなたが考えていることではありません。ORDER BY は where 句の後に評価されます。つまり、最初に見つかった (結合基準を満たす) レコードが選択され、その行が並べ替えられます (これは明らかにノーオペレーションです)。

他の回答 (IvoTops など) は、ソート基準に従って最初のレコードを取得する方法のアイデアを提供します。

于 2012-09-04T02:19:04.130 に答える
1
SELECT        **values** 
INTO          **variables**                  
FROM 
    ( SELECT        **values** 
                  , ROW_MUMBER() OVER (ORDER BY  **sort criteria**) AS rn
      FROM          **table**
      INNER JOIN    **other table**
      ON            **join target**  
    ) tmp 
WHERE        rn = 1 ;

このブログ投稿も確認してください: Oracle: ROW_NUMBER() vs ROWNUM

于 2012-09-03T12:21:13.267 に答える