Oracle:使用WHERE ROWNUM = 1

时间:2012-09-03 09:56:22

标签: oracle

chaps and chapettes

只是一个简单的问题。我需要从存储过程中只返回一行,但无论我在何处放置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 个答案:

答案 0 :(得分:7)

我相信这是构建rownum查询的方法

SELECT * FROM 
INTO **Variables * *
( SELECT * FROM X 
  WHERE Y 
  ORDER BY Z
) 
WHERE ROWNUM = 1;  

答案 1 :(得分:4)

你几乎是对的。您将WHERE子句放在JOIN之后但在ORDER BY之前。

SELECT        **values** 

INTO          **variables**                  

FROM          **table**

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

_WHERE        ROWNUM = 1_

ORDER BY      **sort criteria**;

但是,这不会做你想象的事情 - 在where子句之后评估ORDER BY;这意味着这将只选择它找到的第一条记录(满足连接条件),然后对该行进行排序(显然是无操作)。

其他答案(例如IvoTops')提供了如何根据排序标准获取第一条记录的想法。

答案 2 :(得分: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

答案 3 :(得分:0)

有点晚了,但我遇到了类似的问题,我是这样解决的:

SELECT **values** 
INTO **variables** 
FROM **table**
WHERE **condition**
ORDER BY **sort criteria**
FETCH FIRST 1 ROW ONLY;

问候