使用外键连接表

时间:2018-03-30 09:19:58

标签: sql oracle

列出在每个部门工作的员工人数。

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

任何人都可以帮我找到代码中的错误吗?

1 个答案:

答案 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