查找所有拥有工程师和分析师的部门。使用 Join 并且不要忘记 NULL 值

Find all departments which have engineers AND analysts. Use Join and don't forget about the NULL values

我无法针对所提问题找到正确的解决方案。我有 3 个表:employees、department、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 值做某事。有人可以解释一下吗?谢谢

如果您必须使用连接,那么:

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;

但是您想要的所有信息都在 table EMP 中,因此您无需加入即可完成:

SELECT deptno
FROM EMP 
WHERE job IN ('Engineer', 'Analyst')
GROUP BY deptno
HAVING COUNT(DISTINCT job) = 2;