2015-06-07 85 views
3

假设我有树表如何在oracle的嵌套查询的where子句中使用select参数?

h   y   t 
-------  ----- ------------ 
id   id  id name 
-------  ----- ------------ 
1    1  1 john 
2    2  2 alex 
3    8  6 maggie 

,我有一个这样的查询:

select t.*,(select y.id from (select * h where h.id > t.id) y) t 

问题是我不能在内部查询使用t.id。我想知道什么是问题,解决方案是什么?我在oracle中使用这个查询11g

+1

你正在做什么?为什么你使用这么多嵌套查询? – uhs

+0

你的例子至少缺少'from',数据暗示'y'是一个单独的表,而不仅仅是一个内联视图。你能澄清这个例子吗?有没有你使用子查询而不是联接的共振 - 你认为这对你的真实的,可能更复杂的查询是必要的吗? –

回答

2

你只能在一个级别的外部作用域中引用表(或他们的别名)。所以t不在最内层的范围内,并且不被识别。

只有当单个h记录的ID高于每个t记录时,您的查询才会有效 - 这似乎不太可能;否则子查询将返回太多的行。

这里不需要嵌套或任何子查询。无论如何,你有更多的关卡。对于这个例子,你可以这样做:

select t.*, h.id from t join h on h.id > t.id 

但由于你的示例数据和查询不匹配,很难说出你真正需要什么。

相关问题