我有 2 个表: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);
这适用于查找在 deptno 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);
这实际上让我精神崩溃,我并不是它不起作用的原因。我需要找到一种使用子查询的方法。 任何帮助都会很棒!
最佳答案
子查询中的第二个查询中似乎没有使用 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 字段)意味着没有找到匹配的记录。
关于mysql - 对两个表使用子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48533614/