列出在每个部门工作的员工人数。
SELECT DEPT_NO AS "DEPARTMENT NO" ,COUNT(ID_NO) AS "NO OF EMPLOYEE"
FROM EMPLOYEES
GROUP BY DEPT_NO
ORDER BY DEPT_NO
产生以下结果:
DEPARTMENT NO NO OF EMPLOYEE
------------- --------------
1 4
2 3
3 3
5 8
直到这里工作正常。但是当我尝试使用外键与另一个表组合时,它会抛出一个错误:
SELECT E.DEPT_NO AS "DEPARTMENT NO" , D.DEPT_NAME AS "DEPARTMENT NAME" ,COUNT(E.ID_NO) AS "NO OF EMPLOYEE"
FROM EMPLOYEES E,DEPTS D
WHERE E.DEPT_NO=D.DEPT_NO
GROUP BY DEPT_NO
ORDER BY DEPT_NO
ORDER BY DEPT_NO
*
ERROR AT LINE 5
ORA-00918: column ambiguously defined
任何人都可以帮我找到代码中的错误吗?
答案 0 :(得分:2)
您的查询中的更正:
GROUP BY E.DEPT_NO
ORDER BY E.DEPT_NO
在查询中更改以上两行,因为SQL无法识别您引用的DEPT_NO列。
错误原因:
连接中使用的列名存在于多个表中,因此 暧昧地引用。在连接中,出现更多的列名称 其中一个表必须以其表名为前缀 引用。该列应引用为TABLE.COLUMN或 TABLE_ALIAS.COLUMN。例如,如果表是EMP和DEPT 加入并且都包含列DEPTNO,然后是所有引用 DEPTNO应该以表名为前缀,如EMP.DEPTNO或 E.DEPTNO。
有关详细信息,请访问以下链接:
http://www.dba-oracle.com/t_ora_00918_column_ambiguously_defined.htm
更改您的查询:
SELECT E.Dept_No AS 'Department NUmber', D.Dept_Name AS 'Department Name',
COUNT(E.ID_NO) AS 'No. Of Employee'
FROM Employee E
INNER JOIN Department D
ON E.DEPT_No = D.Dept_No
GROUP BY E.DEPT_No,D.Dept_Name
ORDER BY E.DEPT_No