2013-11-19 3 views
0

У меня есть база данных, которая имеет следующие таблицыоракул: SQL союз запрос

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 

Мне нужно создать запрос с использованием UNION, чтобы отобразить имена всех сотрудников, и если они являются менеджером отдела, то dept_name.

Вот что я имею

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 сотрудников х 4 отделов) вместо 9, что я должен получать.

Любая помощь была бы принята с благодарностью.

+1

Ваш второй подзапрос уже не условие соединения, поэтому он производит полный перекрестное произведение двух таблиц. – Barmar

+0

Вы должны использовать 'LEFT JOIN', а не' UNION'. – Barmar

+0

Вы должны использовать явные 'JOIN' вместо условий неявного соединения старого стиля в разделе' WHERE' –

ответ

0

не Используйте LEFT JOIN, не UNION:

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

Мне нужно использовать UNION. – user1873736

+0

Почему, это домашнее задание? – Barmar

+0

Если это домашнее задание, я не собираюсь делать это за вас. Вам нужно заменить второй подзапрос в вашем союзе на тот, который возвращает сотрудников, не являющихся менеджерами отделов. – Barmar

Смежные вопросы