我刚刚尝试在Oracle中的SELECT
语句的子句中执行相关子查询,但给出了一个错误,指示我无法执行关联(大意如此:Obs.pID
未被认出)。FROM列表中的Oracle相关子查询
应该这样工作吗?
FROM ml.Person Person
JOIN ml.Obs ON Person.pID = Obs.pId
JOIN (SELECT ObsMax2.pId, ObsMax2.hdId
, MAX(ObsMax2.obsDate) as maxDate
FROM ml.Obs ObsMax2
WHERE ObsMax2.pId = Obs.pId
AND ObsMax2.obsDate < {?EndDate}
GROUP BY ObsMax2.pId, ObsMax2.hdId) ObsMax
ON Obs.pId = ObsMax.pId
AND Obs.hdId = ObsMax.hdId
AND Obs.obsDate = ObsMax.maxDate
我的解决办法似乎是使它成为一个非相关子查询,并添加标准,保持它完全横行,横行霸道,amu-- OOF对不起子查询。
我宁愿弄清楚如何正确地关联它,尽管如果可能的话 - 像子查询一样工作的视图需要永远构建。
你可能想重构查询,不只是解决这个问题语法您中运行。考虑添加关于你想要完成的问题的澄清。 – Alkini 2009-03-04 19:42:56
@David - “Pedant”:-) @Alan - 我只是不确定在什么程度上我应该谈论这个系统的内部。通常情况下,我会使用一个内置的视图,通过pID/hdID进行分组来获得最新的观察结果 - 但是如果它在2009年并且您正在查询2008,则会失败。 – SarekOfVulcan 2009-03-05 05:25:01