2

小节和小节

只是一个快速的问题。我只需要从存储过程中返回一行,但是无论我将 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

你几乎是正确的。您将 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')给出了如何根据排序标准获取第一条记录的想法。

于 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() 与 ROWNUM

于 2012-09-03T12:21:13.267 回答
0

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

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

问候

于 2021-07-07T11:15:02.313 回答