【问题标题】:oracle, missing right parenthesis when adding subqueryoracle,添加子查询时缺少右括号
【发布时间】:2016-02-02 03:52:14
【问题描述】:

内部查询如下,独立工作正常

select graduate.univid
from graduate, projectmanager, university
where graduate.empid = projectmanager.mgrid and rownum = 1
group by graduate.univid
order by count(graduate.univid) desc;

但是当作为子查询放置时,ORACLE sqlplus 不断给出“缺少右括号”的错误

select university.univname
from university
where exists 
(
select graduate.univid
from graduate, projectmanager, university
where graduate.empid = projectmanager.mgrid and rownum = 1
group by graduate.univid
order by count(graduate.univid)
);

我在 stackoverflow 上检查过类似的问题,但并没有真正的帮助

【问题讨论】:

  • 由于各种原因,您的查询看起来不正确。它缺少连接条件(并且您应该始终使用明确的JOIN)。当您只获取一行时,您正在聚合。

标签: sql oracle


【解决方案1】:

你使用存在,所以你必须给出大学和子查询的条件。你错过了你得到错误我会猜对正确的查询:

select t1.univname
from university t1
where exists 
(  select 1 from (
   select graduate.univid
   from graduate, projectmanager, university
   where graduate.empid = projectmanager.mgrid and rownum = 1
   group by graduate.univid
   order by count(graduate.univid)) t2 where t2.univid = t1.univid
);

【讨论】:

    【解决方案2】:

    假设你的其余逻辑是正确的,问题是order by 子句。您应该在子查询中使用它。 试试这个

    select university.univname
    from university
    where exists 
    (
    select graduate.univid
    from graduate, projectmanager, university
    where graduate.empid = projectmanager.mgrid and rownum = 1
    group by graduate.univid
    );
    

    您可以自己尝试一下。

    此查询将返回1

    select 1 from dual
    where exists
    (select 2 as id from dual)
    

    但这会失败并给你ORA-00907: missing right parenthesis

    select 1 from dual
    where exists
    (select 2 as id from dual order by id )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-10
      • 2019-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多