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_
由于
答案 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;
问候