0

我在这里有一个疑问:对于美国的每个国家,请给出最高的山峰及其高度;按高度排序。和表格:

encompasses : country,continent   
geo_mountain: mountain,country  
mountain:name,height

我是这样写的:

select co.country,mo.name, max(mo.height) as mheight
from mountain mo,encompasses co
join geo_mountain gmo
on mo.name=gmo.mountain
where gmo.country=any (select country from encompasses where continen='America') 
GROUP BY co.country
order by mheight;

但我在 oracle 11g 中收到此错误:

Error at Command Line:203 Column:4(second like)
SQL Error: ORA-00904: "MO"."NAME": invalid identifier
4

2 回答 2

4

问题是您正在混合 JOIN 语法 - 您同时使用显式和隐式语法。显式 JOIN 具有更高的优先级,因此无法使用隐式连接 ( mountain, ) 中的表的别名。encompasses如果要执行交叉连接或笛卡尔结果,则应使用:

select co.country,
  mo.name, 
  max(mo.height) as mheight
from mountain mo
cross join encompasses co
join geo_mountain gmo
  on mo.name=gmo.mountain
where gmo.country=any (select country 
                       from encompasses 
                       where continent ='America') 
GROUP BY co.country, mo.name
order by mheight;
于 2013-05-01T13:40:38.487 回答
-1

尝试对完整的表名而不是别名进行连接... on mountain.name = geo_mountain.mountain

还要记住,Oracle 是区分大小写的(至少在我上次使用它时)。您可能还想对连接字段进行更高的转换。

于 2013-05-01T13:27:20.073 回答