Oracle 缺少右括号 ORA-00907

Posted

技术标签:

【中文标题】Oracle 缺少右括号 ORA-00907【英文标题】:Oracle Missing right parenthesis ORA-00907 【发布时间】:2016-04-07 17:48:15 【问题描述】:

考虑具有三个关系的数据库架构:

Employee (*eid:integer*, ename:string, age:integer, salary:real)
Works (*eid:integer*, *did:integer*, pct_time:integer)
Department(*did:integer*, dname:string, budget:real, managerid:integer)

查询上面的视图,找到管理最多员工的经理的姓名。如果同一员工在多个部门工作,则该员工在每个部门计算一次 部门。经理与所有其他员工一样包含在计数中,即基于 在他或她在 Works 表中的记录上。

为什么会出现这个错误:

ORDER BY SUM (EmpCount) DESC)

*

第 6 行出现错误: ORA-00907: 缺少右括号

这是我的查询:

SELECT distinct(MgrName)
FROM ManagerSummary
WHERE MgrID = (SELECT MgrID
             FROM ManagerSummary
             GROUP BY MgrID
             ORDER BY SUM (EmpCount) DESC
             LIMIT 1 );

观点是:

CREATE VIEW ManagerSummary (DeptName, MgrID, MgrName, MgrSalary, EmpCount)
AS SELECT d.dname, d.managerid, e.ename, e.salary,
   (SELECT COUNT (w.did)
    FROM works w
    WHERE w.did = d.did
    GROUP BY w.did)
FROM employee e, department d WHERE d.managerid = e.eid;

谢谢

更新:将 LIMIT 1 更改为 WHERE ROWNUM = 1 没有帮助

【问题讨论】:

mysql 出现oracle 错误怎么办? 基于 Oracle 错误,我将删除问题中对 MySQL 的所有引用。 oracle有limit吗? @Lashane - 不,它没有限制。 【参考方案1】:

试试这个

SELECT DISTINCT (MgrName)
FROM ManagerSummary
WHERE MgrID = (SELECT MgrId
              FROM (  SELECT MgrId, SUM (empcount) AS maxemp
                        FROM ManagerSummary
                    GROUP BY MgrId
                    ORDER BY SUM (empcount) DESC)
             WHERE ROWNUM = 1)

【讨论】:

太棒了!非常感谢,它有效,我会支持它,但我的评分太低了 没关系,我很乐意提供帮助【参考方案2】:

您似乎想要拥有最多员工的经理的姓名。

我的猜测是你可以在 Oracle 中这样做:

select ms.MgrName
from (select ms.*
      from ManagerSummary ms
      order by EmpCount desc
     ) ms
where rownum = 1;

我很难想象一个名为ManagerSummary 的表每个MgrId 会有多于一行。这就是为什么我不认为聚合是必要的。

【讨论】:

有3张桌子。员工、部门和工作。一个经理可以管理多个部门,这就是一个ManagerId可以多次出现的方式。我编辑了我的问题以显示视图【参考方案3】:
SELECT mgrname
  FROM (SELECT mgrname, numemps
          FROM (SELECT mgrname, count(*) numemps
                  FROM mgrsummary
              GROUP BY mgrname)
        ORDER BY NUMEMPS desc);

刚刚注意到 - 这是基于视图。这〜不会〜表现良好。

【讨论】:

这是作业的一部分,使用视图 叹息。这些线程很难阅读。我的第一个选择站。

以上是关于Oracle 缺少右括号 ORA-00907的主要内容,如果未能解决你的问题,请参考以下文章

Oracle 错误 - ORA-00907: 缺少右括号

Oracle Live SQL:ORA-00907:缺少右括号 -

Oracle 缺少右括号 ORA-00907

为啥 OraOLEDB.Oracle GetRecordSet() 会抛出“ORA-00907:缺少右括号”错误?

在 oracle 10g 中出现错误 .. 错误:- ORA-00907:缺少右括号

从 DB2 移植到 ORACLE - ORA-00907:缺少右括号