SQL错误子查询缺少右括号

SQL错误子查询缺少右括号,sql,oracle,subquery,Sql,Oracle,Subquery,我有一个疑问: SELECT rr.rate_value FROM rent_rate rr WHERE rr.item_id = 940 AND rownum = 1 ORDER BY rr.effective_on DESC 它作为一个独立的查询工作,但是当我将它作为子查询插入到主查询时,我会收到一个错误,说我缺少一个右括号 SELECT c.id, ( SELECT rr.rate_value FROM rent_rate rr WHERE rr.item_id = 940

我有一个疑问:

SELECT rr.rate_value
FROM rent_rate rr
WHERE rr.item_id = 940
AND rownum = 1
ORDER BY rr.effective_on DESC
它作为一个独立的查询工作,但是当我将它作为子查询插入到主查询时,我会收到一个错误,说我缺少一个右括号

SELECT
c.id,
(
  SELECT rr.rate_value
  FROM rent_rate rr
  WHERE rr.item_id = 940
  AND rownum = 1
  ORDER BY rr.effective_on DESC
) AS the_rate
FROM cages c
WHERE c.id = 9009
AND c.is_hidden = 'N'

我认为更重要的是,查询并不能满足您的要求。
rownum
order by
处理行之前过滤行。因此,您将提取任意匹配行,按列对一行进行排序,并在另一列中返回值

这里有一种方法来计算我认为你的意图:

SELECT MAX(rr.rate_value) KEEP (DENSE_RANK FIRST ORDER BY rr.effective_on DESC)
FROM rent_rate rr
WHERE rr.item_id = 940

无论是这个版本还是问题中的版本,在括号之间都应该可以正常工作。

我认为更重要的是,查询并不能满足您的要求。
rownum
order by
处理行之前过滤行。因此,您将提取任意匹配行,按列对一行进行排序,并在另一列中返回值

这里有一种方法来计算我认为你的意图:

SELECT MAX(rr.rate_value) KEEP (DENSE_RANK FIRST ORDER BY rr.effective_on DESC)
FROM rent_rate rr
WHERE rr.item_id = 940

此版本或问题中的版本在括号之间应该可以正常工作。

Oracle不支持AS for表;尝试使用
。。。从tbl_name tbl…
@Aleksej抱歉,这只是我匆忙提出的问题。实际上,对于< <代码> > 子句,我并没有一个<代码> <代码>。有可能作为一个缺失的PARN的潜在微妙之处,考虑将您的错误查询直接剪切粘贴到第二个代码片段中,而不是提供一个编辑版本。@ BobKaufman我已经复制粘贴了我正在使用的实际代码;尝试使用
。。。从tbl_name tbl…
@Aleksej抱歉,这只是我匆忙提出的问题。实际上,对于< <代码> > 子句,我并没有一个<代码> <代码>。有可能作为一个缺失的PARN的潜在微妙之处,考虑将您的错误查询直接剪切粘贴到第二个代码片段中,而不是提供一个编辑版本。@ BobKaufman我已经复制粘贴了我正在使用的实际代码。我理解你说的我的错误是什么,但我不理解你的解决方案在做什么。但是,嘿,它起作用了!要解释发生了什么吗?
keep
获取一列按另一列排序的第一个值。这似乎就是你想要做的。否则,可以对两个嵌套子查询执行相同的操作。但是,Oracle不允许在子查询中使用关联子句,因此
keep
是更简单的方法。我理解您的意思,我的错误是什么,但我不理解您的解决方案在做什么。但是,嘿,它起作用了!要解释发生了什么吗?
keep
获取一列按另一列排序的第一个值。这似乎就是你想要做的。否则,可以对两个嵌套子查询执行相同的操作。但是,Oracle不允许在子查询中使用关联子句,因此
keep
是更简单的方法。