查找所有拥有工程师和分析师的部门。使用 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;
我无法针对所提问题找到正确的解决方案。我有 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;