Найдите все отделы, в которых есть инженеры и аналитики. Используйте Join и не забывайте о значениях NULL - PullRequest
0 голосов
/ 11 октября 2019

У меня проблема с правильным решением поставленного вопроса. У меня 3 таблицы: сотрудники, департамент, salgrade. Вот что я получил до сих пор:

SELECT e0.deptno
FROM EMP AS e0
INNER JOIN dept AS d0 ON e0.deptno=d0.deptno
WHERE
e0.job ='Engineer'
AND
e0.job='Analyst'
AND 
e0.job IS NOT NULL;

Ожидаемый результат - это номер отдела, но мой результат ничего не показывает. Я попытался с помощью оператора INTERSECT, и все работает нормально. Но я не понимаю, что я делаю неправильно при использовании JOIN. Я думаю, что я не делаю что-то правильно со значениями NULL. Может кто-нибудь попытаться объяснить мне? Спасибо

1 Ответ

3 голосов
/ 11 октября 2019

Если вам нужно использовать соединение, то:

SELECT d0.deptno
FROM dept AS d0 INNER JOIN EMP AS e0 
ON e0.deptno = d0.deptno
WHERE e0.job IN ('Engineer', 'Analyst')
GROUP BY d0.deptno
HAVING COUNT(DISTINCT e0.job) = 2;

Но вся необходимая информация находится в таблице EMP, так что вы можете сделать это без объединения:

SELECT deptno
FROM EMP 
WHERE job IN ('Engineer', 'Analyst')
GROUP BY deptno
HAVING COUNT(DISTINCT job) = 2;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...