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 Live SQL:ORA-00907:缺少右括号 -
为啥 OraOLEDB.Oracle GetRecordSet() 会抛出“ORA-00907:缺少右括号”错误?