mysql - 对两个表使用子查询

标签 mysql sql subquery

我有 2 个表: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);

这适用于查找在 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/

相关文章:

sql - 如何在 SQL Server 2008 中的链接 Firebird 服务器上执行存储过程

mysql - SQL查询中如何根据出现的顺序对数据进行分组

java - 重新设计MySQL表的主键

mysql - 在值不存在的情况下返回行的子查询

python - SQLAlchemy:如何遍历子查询中的bindparam值?

php - MySQL存储在一台服务器上转义的字符而不是另一台服务器

sql - 如何更改此 SQL 以便我可以从每个作者那里获取一篇文章?

mysql - 如何使用 shell 脚本在 MySql 数据库中批量插入/更新图像

php - Laravel leftJoin 现在显示结果

MySQL JOIN 2 依赖于第一个子查询的子查询