我有两个表:emp
和dept
,其中包含有关员工及其部门的信息。我试图使用子查询来查找具有相同部门(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);
这实际上让我精神振奋,我不是为什么它不起作用。我需要找到一种使用子查询的方法。 任何帮助都会很棒!
答案 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字段)表示未找到匹配的记录。