使用带有两个表的子查询

时间:2018-01-31 02:38:49

标签: mysql sql subquery

我有两个表:empdept,其中包含有关员工及其部门的信息。我试图使用子查询来查找具有相同部门(1,2,3或4)的员工,并检查他们是否有相同的工作(文员,推销员等)。

SELECT
  e1.ename,
  e1.job
FROM emp e1,
     emp e2
WHERE e2.deptno = 3
AND e1.deptno = 1 IN (SELECT
  deptno
FROM emp
WHERE e1.job = e2.job);

这适用于找到在第1和第3部分中具有相同工作的emp,但是当我试图找到没有相同工作的emp时,我没有得到正确的答案。

SELECT
  e1.ename,
  e1.job
FROM emp e1,
     emp e2
WHERE e2.deptno = 3
AND e1.deptno = 1 NOT IN (SELECT
  deptno
FROM emp
WHERE e1.job = e2.job);

这实际上让我精神振奋,我不是为什么它不起作用。我需要找到一种使用子查询的方法。 任何帮助都会很棒!

1 个答案:

答案 0 :(得分:0)

在子查询的第二个查询中似乎没有使用Emp:

select e1.ename, e1.job 
from emp e1 LEFT OUTER JOIN emp e2 ON e2.deptno = 3 AND E1.JOB=E2.JOB
where e1.deptno = 1 and E2.ENAME IS NULL

这应该让你的员工不在同一份工作中。

基本上,我们加入匹配工作。 E2的ENAME为空(假设这是一个NOT NULL字段)表示未找到匹配的记录。