oracle:sql联合查询

oracle:sql联合查询,sql,oracle,Sql,Oracle,我有一个数据库,其中包含以下表格 EMPLOYEE:[FIRST_NAME, MID_INIT, LAST_NAME, SSNO, BDATE, ADDRESS, GENDER, SALARY, SUPSSNO, DNO] DEPARTMENT:[DEPT_NAME, DEPT_NO, MGRSSNO, MGR_START_DATE] DEPARTMENT.MGRSSNO is a foreign key of EMPLOYEE.SSNO 我需要使用工会构建一个查询,以显示所有员工的姓名,如

我有一个数据库,其中包含以下表格

EMPLOYEE:[FIRST_NAME, MID_INIT, LAST_NAME, SSNO, BDATE, ADDRESS, GENDER, SALARY, SUPSSNO, DNO]
DEPARTMENT:[DEPT_NAME, DEPT_NO, MGRSSNO, MGR_START_DATE]

DEPARTMENT.MGRSSNO is a foreign key of EMPLOYEE.SSNO
我需要使用工会构建一个查询,以显示所有员工的姓名,如果他们是部门经理,则显示部门名称

这是我的

SELECT E.FIRST_NAME, E.LAST_NAME, E.ADDRESS, D.DEPT_NAME
FROM EMPLOYEE E, DEPARTMENT D
WHERE E.SSNO=D.MGRSSNO
UNION
SELECT E.FIRST_NAME, E.LAST_NAME, E.ADDRESS, D.DEPT_NAME
FROM EMPLOYEE E, DEPARTMENT D;
除了我得到的是36行(9名员工x 4个部门),而不是我应该得到的9行


任何帮助都将不胜感激。

使用
左连接,而不是
联合

SELECT e.FIRST_NAME, e.LAST_NAME, e.ADDRESS, d.DEPT_NAME
FROM EMPLOYEE e
LEFT JOIN DEPARTMENT d ON e.SSNO = d.MGRSSNO

您的第二个子查询没有联接条件,因此它会生成两个表的完全叉积。您应该使用
左联接
,而不是
联合
。您应该使用显式
联合
而不是
中的旧式隐式联合条件,其中
子句必须使用联合。如果是作业,我不会为你做的。您需要将工会中的第二个子查询替换为只返回非部门经理的员工的子查询。